70 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
|  | /* ========================================================================== */ | ||
|  | /* === SuiteSparseQR_definitions.h ========================================== */ | ||
|  | /* ========================================================================== */ | ||
|  | 
 | ||
|  | /* Core definitions for both C and C++ programs. */ | ||
|  | 
 | ||
|  | #ifndef SUITESPARSEQR_DEFINITIONS_H
 | ||
|  | #define SUITESPARSEQR_DEFINITIONS_H
 | ||
|  | 
 | ||
|  | /* ordering options */ | ||
|  | #define SPQR_ORDERING_FIXED 0
 | ||
|  | #define SPQR_ORDERING_NATURAL 1
 | ||
|  | #define SPQR_ORDERING_COLAMD 2
 | ||
|  | #define SPQR_ORDERING_GIVEN 3       /* only used for C/C++ interface */
 | ||
|  | #define SPQR_ORDERING_CHOLMOD 4     /* CHOLMOD best-effort (COLAMD, METIS,...)*/
 | ||
|  | #define SPQR_ORDERING_AMD 5         /* AMD(A'*A) */
 | ||
|  | #define SPQR_ORDERING_METIS 6       /* metis(A'*A) */
 | ||
|  | #define SPQR_ORDERING_DEFAULT 7     /* SuiteSparseQR default ordering */
 | ||
|  | #define SPQR_ORDERING_BEST 8        /* try COLAMD, AMD, and METIS; pick best */
 | ||
|  | #define SPQR_ORDERING_BESTAMD 9     /* try COLAMD and AMD; pick best */
 | ||
|  | 
 | ||
|  | /* Let [m n] = size of the matrix after pruning singletons.  The default
 | ||
|  |  * ordering strategy is to use COLAMD if m <= 2*n.  Otherwise, AMD(A'A) is | ||
|  |  * tried.  If there is a high fill-in with AMD then try METIS(A'A) and take | ||
|  |  * the best of AMD and METIS.  METIS is not tried if it isn't installed. */ | ||
|  | 
 | ||
|  | /* tol options */ | ||
|  | #define SPQR_DEFAULT_TOL (-2)       /* if tol <= -2, the default tol is used */
 | ||
|  | #define SPQR_NO_TOL (-1)            /* if -2 < tol < 0, then no tol is used */
 | ||
|  | 
 | ||
|  | /* for qmult, method can be 0,1,2,3: */ | ||
|  | #define SPQR_QTX 0
 | ||
|  | #define SPQR_QX  1
 | ||
|  | #define SPQR_XQT 2
 | ||
|  | #define SPQR_XQ  3
 | ||
|  | 
 | ||
|  | /* system can be 0,1,2,3:  Given Q*R=A*E from SuiteSparseQR_factorize: */ | ||
|  | #define SPQR_RX_EQUALS_B    0       /* solve R*X=B      or X = R\B          */
 | ||
|  | #define SPQR_RETX_EQUALS_B  1       /* solve R*E'*X=B   or X = E*(R\B)      */
 | ||
|  | #define SPQR_RTX_EQUALS_B   2       /* solve R'*X=B     or X = R'\B         */
 | ||
|  | #define SPQR_RTX_EQUALS_ETB 3       /* solve R'*X=E'*B  or X = R'\(E'*B)    */
 | ||
|  | 
 | ||
|  | /* ========================================================================== */ | ||
|  | /* === SuiteSparseQR version ================================================ */ | ||
|  | /* ========================================================================== */ | ||
|  | 
 | ||
|  | /*
 | ||
|  |    All versions of SuiteSparseQR will include the following definitions. | ||
|  |    As an example, to test if the version you are using is 1.3 or later: | ||
|  |    | ||
|  |         if (SPQR_VERSION >= SPQR_VER_CODE (1,3)) ... | ||
|  |    | ||
|  |    This also works during compile-time: | ||
|  |    | ||
|  |         #if SPQR_VERSION >= SPQR_VER_CODE (1,3)
 | ||
|  |             printf ("This is version 1.3 or later\n") ; | ||
|  |         #else
 | ||
|  |             printf ("This is version is earlier than 1.3\n") ; | ||
|  |         #endif
 | ||
|  |  */ | ||
|  | 
 | ||
|  | #define SPQR_DATE "Nov 30, 2009"
 | ||
|  | #define SPQR_VER_CODE(main,sub) ((main) * 1000 + (sub))
 | ||
|  | #define SPQR_MAIN_VERSION 1
 | ||
|  | #define SPQR_SUB_VERSION 2
 | ||
|  | #define SPQR_SUBSUB_VERSION 0
 | ||
|  | #define SPQR_VERSION SPQR_VER_CODE(SPQR_MAIN_VERSION,SPQR_SUB_VERSION)
 | ||
|  | 
 | ||
|  | #endif
 |