Actual source code: dlregismat.c
1: #define PETSCMAT_DLL
3: #include private/matimpl.h
5: const char *MatOptions[] = {"ROW_ORIENTED","NEW_NONZERO_LOCATIONS",
6: "SYMMETRIC",
7: "STRUCTURALLY_SYMMETRIC",
8: "NEW_DIAGONALS",
9: "IGNORE_OFF_PROC_ENTRIES",
10: "NEW_NONZERO_LOCATION_ERR",
11: "NEW_NONZERO_ALLOCATION_ERR","USE_HASH_TABLE",
12: "KEEP_ZEROED_ROWS","IGNORE_ZERO_ENTRIES","USE_INODES",
13: "HERMITIAN",
14: "SYMMETRY_ETERNAL",
15: "USE_COMPRESSEDROW",
16: "IGNORE_LOWER_TRIANGULAR","ERROR_LOWER_TRIANGULAR","GETROW_UPPERTRIANGULAR","MatOption","MAT_",0};
17: const char *MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
19: EXTERN PetscErrorCode MatMFFDInitializePackage(const char[]);
20: static PetscTruth MatPackageInitialized = PETSC_FALSE;
23: /*@C
24: MatFinalizePackage - This function destroys everything in the Petsc interface to the charactoristics package. It is
25: called from PetscFinalize().
27: Level: developer
29: .keywords: Petsc, destroy, package, mathematica
30: .seealso: PetscFinalize()
31: @*/
32: PetscErrorCode MatFinalizePackage(void)
33: {
35: MatPackageInitialized = PETSC_FALSE;
36: MatRegisterAllCalled = PETSC_FALSE;
37: MatList = PETSC_NULL;
38: MatOrderingRegisterAllCalled = PETSC_FALSE;
39: MatOrderingList = PETSC_NULL;
40: MatColoringList = PETSC_NULL;
41: MatColoringRegisterAllCalled = PETSC_FALSE;
42: MatPartitioningList = PETSC_NULL;
43: MatPartitioningRegisterAllCalled = PETSC_FALSE;
44: return(0);
45: }
49: /*@C
50: MatInitializePackage - This function initializes everything in the Mat package. It is called
51: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
52: when using static libraries.
54: Input Parameter:
55: path - The dynamic library path, or PETSC_NULL
57: Level: developer
59: .keywords: Mat, initialize, package
60: .seealso: PetscInitialize()
61: @*/
62: PetscErrorCode MatInitializePackage(const char path[])
63: {
64: char logList[256];
65: char *className;
66: PetscTruth opt;
67: PetscErrorCode ierr;
70: if (MatPackageInitialized) return(0);
71: MatPackageInitialized = PETSC_TRUE;
72: /* Inialize subpackage */
73: MatMFFDInitializePackage(path);
74: /* Register Classes */
75: PetscCookieRegister("Matrix",&MAT_COOKIE);
76: PetscCookieRegister("Matrix FD Coloring",&MAT_FDCOLORING_COOKIE);
77: PetscCookieRegister("Matrix Partitioning",&MAT_PARTITIONING_COOKIE);
78: PetscCookieRegister("Matrix Null Space",&MAT_NULLSPACE_COOKIE);
79: /* Register Constructors */
80: MatRegisterAll(path);
81: MatOrderingRegisterAll(path);
82: MatColoringRegisterAll(path);
83: MatPartitioningRegisterAll(path);
84: /* Register Events */
85: PetscLogEventRegister("MatMult", MAT_COOKIE,&MAT_Mult);
86: PetscLogEventRegister("MatMults", MAT_COOKIE,&MAT_Mults);
87: PetscLogEventRegister("MatMultConstr", MAT_COOKIE,&MAT_MultConstrained);
88: PetscLogEventRegister("MatMultAdd", MAT_COOKIE,&MAT_MultAdd);
89: PetscLogEventRegister("MatMultTranspose", MAT_COOKIE,&MAT_MultTranspose);
90: PetscLogEventRegister("MatMultTrConstr", MAT_COOKIE,&MAT_MultTransposeConstrained);
91: PetscLogEventRegister("MatMultTrAdd", MAT_COOKIE,&MAT_MultTransposeAdd);
92: PetscLogEventRegister("MatSolve", MAT_COOKIE,&MAT_Solve);
93: PetscLogEventRegister("MatSolves", MAT_COOKIE,&MAT_Solves);
94: PetscLogEventRegister("MatSolveAdd", MAT_COOKIE,&MAT_SolveAdd);
95: PetscLogEventRegister("MatSolveTranspos", MAT_COOKIE,&MAT_SolveTranspose);
96: PetscLogEventRegister("MatSolveTrAdd", MAT_COOKIE,&MAT_SolveTransposeAdd);
97: PetscLogEventRegister("MatSOR", MAT_COOKIE,&MAT_SOR);
98: PetscLogEventRegister("MatForwardSolve", MAT_COOKIE,&MAT_ForwardSolve);
99: PetscLogEventRegister("MatBackwardSolve", MAT_COOKIE,&MAT_BackwardSolve);
100: PetscLogEventRegister("MatLUFactor", MAT_COOKIE,&MAT_LUFactor);
101: PetscLogEventRegister("MatLUFactorSym", MAT_COOKIE,&MAT_LUFactorSymbolic);
102: PetscLogEventRegister("MatLUFactorNum", MAT_COOKIE,&MAT_LUFactorNumeric);
103: PetscLogEventRegister("MatCholeskyFctr", MAT_COOKIE,&MAT_CholeskyFactor);
104: PetscLogEventRegister("MatCholFctrSym", MAT_COOKIE,&MAT_CholeskyFactorSymbolic);
105: PetscLogEventRegister("MatCholFctrNum", MAT_COOKIE,&MAT_CholeskyFactorNumeric);
106: PetscLogEventRegister("MatILUFactor", MAT_COOKIE,&MAT_ILUFactor);
107: PetscLogEventRegister("MatILUFactorSym", MAT_COOKIE,&MAT_ILUFactorSymbolic);
108: PetscLogEventRegister("MatICCFactorSym", MAT_COOKIE,&MAT_ICCFactorSymbolic);
109: PetscLogEventRegister("MatCopy", MAT_COOKIE,&MAT_Copy);
110: PetscLogEventRegister("MatConvert", MAT_COOKIE,&MAT_Convert);
111: PetscLogEventRegister("MatScale", MAT_COOKIE,&MAT_Scale);
112: PetscLogEventRegister("MatAssemblyBegin", MAT_COOKIE,&MAT_AssemblyBegin);
113: PetscLogEventRegister("MatAssemblyEnd", MAT_COOKIE,&MAT_AssemblyEnd);
114: PetscLogEventRegister("MatSetValues", MAT_COOKIE,&MAT_SetValues);
115: PetscLogEventRegister("MatGetValues", MAT_COOKIE,&MAT_GetValues);
116: PetscLogEventRegister("MatGetRow", MAT_COOKIE,&MAT_GetRow);
117: PetscLogEventRegister("MatGetRowIJ", MAT_COOKIE,&MAT_GetRowIJ);
118: PetscLogEventRegister("MatGetSubMatrice", MAT_COOKIE,&MAT_GetSubMatrices);
119: PetscLogEventRegister("MatGetColoring", MAT_COOKIE,&MAT_GetColoring);
120: PetscLogEventRegister("MatGetOrdering", MAT_COOKIE,&MAT_GetOrdering);
121: PetscLogEventRegister("MatIncreaseOvrlp", MAT_COOKIE,&MAT_IncreaseOverlap);
122: PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_COOKIE,&MAT_Partitioning);
123: PetscLogEventRegister("MatZeroEntries", MAT_COOKIE,&MAT_ZeroEntries);
124: PetscLogEventRegister("MatLoad", MAT_COOKIE,&MAT_Load);
125: PetscLogEventRegister("MatView", MAT_COOKIE,&MAT_View);
126: PetscLogEventRegister("MatAXPY", MAT_COOKIE,&MAT_AXPY);
127: PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_COOKIE,&MAT_FDColoringCreate);
128: PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_COOKIE,&MAT_FDColoringApply);
129: PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_COOKIE,&MAT_FDColoringFunction);
130: PetscLogEventRegister("MatTranspose", MAT_COOKIE,&MAT_Transpose);
131: PetscLogEventRegister("MatMatMult", MAT_COOKIE,&MAT_MatMult);
132: PetscLogEventRegister("MatMatSolve", MAT_COOKIE,&MAT_MatSolve);
133: PetscLogEventRegister("MatMatMultSym", MAT_COOKIE,&MAT_MatMultSymbolic);
134: PetscLogEventRegister("MatMatMultNum", MAT_COOKIE,&MAT_MatMultNumeric);
135: PetscLogEventRegister("MatPtAP", MAT_COOKIE,&MAT_PtAP);
136: PetscLogEventRegister("MatPtAPSymbolic", MAT_COOKIE,&MAT_PtAPSymbolic);
137: PetscLogEventRegister("MatPtAPNumeric", MAT_COOKIE,&MAT_PtAPNumeric);
138: PetscLogEventRegister("MatMatMultTrans", MAT_COOKIE,&MAT_MatMultTranspose);
139: PetscLogEventRegister("MatMatMultTrnSym" ,MAT_COOKIE,&MAT_MatMultTransposeSymbolic);
140: PetscLogEventRegister("MatMatMultTrnNum", MAT_COOKIE,&MAT_MatMultTransposeNumeric);
141: PetscLogEventRegister("MatGetRedundant", MAT_COOKIE,&MAT_GetRedundantMatrix);
142: PetscLogEventRegister("MatGetSeqNZStrct", MAT_COOKIE,&MAT_GetSequentialNonzeroStructure);
144: /* these may be specific to MPIAIJ matrices */
145: PetscLogEventRegister("MatMerge_SeqsToMPINumeric",MAT_COOKIE,&MAT_Seqstompinum);
146: PetscLogEventRegister("MatMerge_SeqsToMPISymbolic",MAT_COOKIE,&MAT_Seqstompisym);
147: PetscLogEventRegister("MatMerge_SeqsToMPI",MAT_COOKIE,&MAT_Seqstompi);
148: PetscLogEventRegister("MatGetLocalMat",MAT_COOKIE,&MAT_Getlocalmat);
149: PetscLogEventRegister("MatGetLocalMatCondensed",MAT_COOKIE,&MAT_Getlocalmatcondensed);
150: PetscLogEventRegister("MatGetBrowsOfAcols",MAT_COOKIE,&MAT_GetBrowsOfAcols);
151: PetscLogEventRegister("MatGetBrAoCol",MAT_COOKIE,&MAT_GetBrowsOfAocols);
153: PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_COOKIE,&MAT_Applypapt_symbolic);
154: PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_COOKIE,&MAT_Applypapt_numeric);
155: PetscLogEventRegister("MatApplyPAPt",MAT_COOKIE,&MAT_Applypapt);
157: PetscLogEventRegister("MatGetSymTrans",MAT_COOKIE,&MAT_Getsymtranspose);
158: PetscLogEventRegister("MatGetSymTransR",MAT_COOKIE,&MAT_Getsymtransreduced);
159: PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_COOKIE,&MAT_Transpose_SeqAIJ);
161: /* Turn off high traffic events by default */
162: PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);
163: /* Process info exclusions */
164: PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);
165: if (opt) {
166: PetscStrstr(logList, "mat", &className);
167: if (className) {
168: PetscInfoDeactivateClass(MAT_COOKIE);
169: }
170: }
171: /* Process summary exclusions */
172: PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);
173: if (opt) {
174: PetscStrstr(logList, "mat", &className);
175: if (className) {
176: PetscLogEventDeactivateClass(MAT_COOKIE);
177: }
178: }
179: PetscRegisterFinalize(MatFinalizePackage);
180: return(0);
181: }
183: #ifdef PETSC_USE_DYNAMIC_LIBRARIES
187: /*
188: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
190: This one registers all the matrix methods that are in the basic PETSc Matrix library.
192: Input Parameter:
193: path - library path
194: */
195: PetscErrorCode PetscDLLibraryRegister_petscmat(const char path[])
196: {
199: PetscInitializeNoArguments(); if (ierr) return 1;
202: /*
203: If we got here then PETSc was properly loaded
204: */
205: MatInitializePackage(path);
206: return(0);
207: }
211: #endif /* PETSC_USE_DYNAMIC_LIBRARIES */