4f1c674ee0
http://crd.lbl.gov/~xiaoye/SuperLU/ This is a library to solve sparse matrix systems (type A*x=B). It is able to solve large systems very FAST. Only the necessary parts of the library are included to limit file size and compilation time. This means the example files, fortran interface, test files, matlab interface, cblas library, complex number part and build system have been left out. All (gcc) warnings have been fixed too. This library will be used for LSCM UV unwrapping. With this library, LSCM unwrapping can be calculated in a split second, making the unwrapping proces much more interactive. Added OpenNL (Open Numerical Libary): http://www.loria.fr/~levy/OpenNL/ OpenNL is a library to easily construct and solve sparse linear systems. We use a stripped down version, as an interface to SuperLU. This library was kindly given to use by Bruno Levy.
282 lines
6.7 KiB
C
282 lines
6.7 KiB
C
/*
|
|
* -- SuperLU routine (version 2.0) --
|
|
* Univ. of California Berkeley, Xerox Palo Alto Research Center,
|
|
* and Lawrence Berkeley National Lab.
|
|
* November 1, 1997
|
|
*
|
|
*/
|
|
#ifndef __SUPERLU_CNAMES /* allow multiple inclusions */
|
|
#define __SUPERLU_CNAMES
|
|
|
|
/* We want this flag, safer than putting in build system */
|
|
#define Add_
|
|
|
|
/*
|
|
* 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).
|
|
*/
|
|
|
|
#define ADD_ 0
|
|
#define ADD__ 1
|
|
#define NOCHANGE 2
|
|
#define UPCASE 3
|
|
#define C_CALL 4
|
|
|
|
#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
|
|
|
|
/* 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__(...)
|
|
*/
|
|
#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 dasum_ dasum__
|
|
#define idamax_ idamax__
|
|
#define dcopy_ dcopy__
|
|
#define dscal_ dscal__
|
|
#define dger_ dger__
|
|
#define dnrm2_ dnrm2__
|
|
#define dsymv_ dsymv__
|
|
#define ddot_ ddot__
|
|
#define daxpy_ daxpy__
|
|
#define dsyr2_ dsyr2__
|
|
#define drot_ drot__
|
|
#define dgemv_ dgemv__
|
|
#define dtrsv_ dtrsv__
|
|
#define dgemm_ dgemm__
|
|
#define dtrsm_ dtrsm__
|
|
|
|
#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 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__
|
|
|
|
#define c_bridge_dgssv_ c_bridge_dgssv__
|
|
#define c_fortran_dgssv_ c_fortran_dgssv__
|
|
#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(...)
|
|
*/
|
|
#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 dasum_ SASUM
|
|
#define idamax_ ISAMAX
|
|
#define dcopy_ SCOPY
|
|
#define dscal_ SSCAL
|
|
#define dger_ SGER
|
|
#define dnrm2_ SNRM2
|
|
#define dsymv_ SSYMV
|
|
#define ddot_ SDOT
|
|
#define daxpy_ SAXPY
|
|
#define dsyr2_ SSYR2
|
|
#define drot_ SROT
|
|
#define dgemv_ SGEMV
|
|
#define dtrsv_ STRSV
|
|
#define dgemm_ SGEMM
|
|
#define dtrsm_ STRSM
|
|
|
|
#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 dzasum_ SCASUM
|
|
#define izamax_ ICAMAX
|
|
#define zcopy_ CCOPY
|
|
#define zscal_ CSCAL
|
|
#define dznrm2_ SCNRM2
|
|
#define zaxpy_ CAXPY
|
|
#define zgemv_ CGEMV
|
|
#define ztrsv_ CTRSV
|
|
#define zgemm_ CGEMM
|
|
#define ztrsm_ CTRSM
|
|
#define zgerc_ CGERC
|
|
#define zhemv_ CHEMV
|
|
#define zher2_ CHER2
|
|
|
|
#define c_bridge_dgssv_ C_BRIDGE_DGSSV
|
|
#define c_fortran_dgssv_ C_FORTRAN_DGSSV
|
|
#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(...)
|
|
*/
|
|
#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 dasum_ dasum
|
|
#define idamax_ idamax
|
|
#define dcopy_ dcopy
|
|
#define dscal_ dscal
|
|
#define dger_ dger
|
|
#define dnrm2_ dnrm2
|
|
#define dsymv_ dsymv
|
|
#define ddot_ ddot
|
|
#define daxpy_ daxpy
|
|
#define dsyr2_ dsyr2
|
|
#define drot_ drot
|
|
#define dgemv_ dgemv
|
|
#define dtrsv_ dtrsv
|
|
#define dgemm_ dgemm
|
|
#define dtrsm_ dtrsm
|
|
|
|
#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 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
|
|
|
|
#define c_bridge_dgssv_ c_bridge_dgssv
|
|
#define c_fortran_dgssv_ c_fortran_dgssv
|
|
#endif
|
|
|
|
#endif /* __SUPERLU_CNAMES */
|