xref: /petsc/src/mat/interface/dlregismat.c (revision 7d1ecd342664fc27e38062687b59a7fadc433bc6)
1 
2 #include <private/matimpl.h>
3 
4 const char *MatOptions[] = {"ROW_ORIENTED","NEW_NONZERO_LOCATIONS",
5               "SYMMETRIC",
6               "STRUCTURALLY_SYMMETRIC",
7               "NEW_DIAGONALS",
8               "IGNORE_OFF_PROC_ENTRIES",
9               "NEW_NONZERO_LOCATION_ERR",
10               "NEW_NONZERO_ALLOCATION_ERR","USE_HASH_TABLE",
11               "KEEP_ZEROED_ROWS","IGNORE_ZERO_ENTRIES","USE_INODES",
12               "HERMITIAN",
13               "SYMMETRY_ETERNAL",
14               "CHECK_COMPRESSED_ROW",
15               "IGNORE_LOWER_TRIANGULAR","ERROR_LOWER_TRIANGULAR","GETROW_UPPERTRIANGULAR","SPD","NO_OFF_PROC_ENTRIES","NO_OFF_PROC_ZERO_ROWS","MatOption","MAT_",0};
16 const char *MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
17 const char *MPPTScotchStrategyTypes[] = {"QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",0};
18 
19 extern PetscErrorCode  MatMFFDInitializePackage(const char[]);
20 static PetscBool  MatPackageInitialized = PETSC_FALSE;
21 #undef __FUNCT__
22 #define __FUNCT__ "MatFinalizePackage"
23 /*@C
24   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
25   called from PetscFinalize().
26 
27   Level: developer
28 
29 .keywords: Petsc, destroy, package, mathematica
30 .seealso: PetscFinalize()
31 @*/
32 PetscErrorCode  MatFinalizePackage(void)
33 {
34   MatBaseName    nnames,names = MatBaseNameList;
35   PetscErrorCode ierr;
36 
37   PetscFunctionBegin;
38   while (names) {
39     nnames = names->next;
40     ierr = PetscFree(names->bname);CHKERRQ(ierr);
41     ierr = PetscFree(names->sname);CHKERRQ(ierr);
42     ierr = PetscFree(names->mname);CHKERRQ(ierr);
43     ierr = PetscFree(names);CHKERRQ(ierr);
44     names = nnames;
45   }
46   MatBaseNameList                  = PETSC_NULL;
47   MatPackageInitialized            = PETSC_FALSE;
48   MatRegisterAllCalled             = PETSC_FALSE;
49   MatList                          = PETSC_NULL;
50   MatOrderingRegisterAllCalled     = PETSC_FALSE;
51   MatOrderingList                  = PETSC_NULL;
52   MatColoringList                  = PETSC_NULL;
53   MatColoringRegisterAllCalled     = PETSC_FALSE;
54   MatPartitioningList              = PETSC_NULL;
55   MatPartitioningRegisterAllCalled = PETSC_FALSE;
56   PetscFunctionReturn(0);
57 }
58 
59 #undef __FUNCT__
60 #define __FUNCT__ "MatInitializePackage"
61 /*@C
62   MatInitializePackage - This function initializes everything in the Mat package. It is called
63   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
64   when using static libraries.
65 
66   Input Parameter:
67   path - The dynamic library path, or PETSC_NULL
68 
69   Level: developer
70 
71 .keywords: Mat, initialize, package
72 .seealso: PetscInitialize()
73 @*/
74 PetscErrorCode  MatInitializePackage(const char path[])
75 {
76   char              logList[256];
77   char              *className;
78   PetscBool         opt;
79   PetscErrorCode    ierr;
80 
81   PetscFunctionBegin;
82   if (MatPackageInitialized) PetscFunctionReturn(0);
83   MatPackageInitialized = PETSC_TRUE;
84   /* Inialize subpackage */
85   ierr = MatMFFDInitializePackage(path);CHKERRQ(ierr);
86   /* Register Classes */
87   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
88   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
89   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
90   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
91   /* Register Constructors */
92   ierr = MatRegisterAll(path);CHKERRQ(ierr);
93   ierr = MatOrderingRegisterAll(path);CHKERRQ(ierr);
94   ierr = MatColoringRegisterAll(path);CHKERRQ(ierr);
95   ierr = MatPartitioningRegisterAll(path);CHKERRQ(ierr);
96   /* Register Events */
97   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
98   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
99   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
100   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
101   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
102   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
103   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
104   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
105   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
106   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
107   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
108   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
109   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
110   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
111   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
112   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
113   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
114   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
115   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
116   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
117   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
118   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
119   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
120   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
121   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
122   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
123   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
124   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
125   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
126   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
127   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
128   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
129   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
130   ierr = PetscLogEventRegister("MatGetSubMatrice", MAT_CLASSID,&MAT_GetSubMatrices);CHKERRQ(ierr);
131   ierr = PetscLogEventRegister("MatGetColoring",   MAT_CLASSID,&MAT_GetColoring);CHKERRQ(ierr);
132   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
133   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
134   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
135   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
136   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
137   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
138   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
139   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
140   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
141   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
142   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
143   ierr = PetscLogEventRegister("MatMatMult",       MAT_CLASSID,&MAT_MatMult);CHKERRQ(ierr);
144   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
145   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
146   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
147   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
148   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
149   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
150   ierr = PetscLogEventRegister("MatMatMultTrans",  MAT_CLASSID,&MAT_MatMultTranspose);CHKERRQ(ierr);
151   ierr = PetscLogEventRegister("MatMatMultTrnSym" ,MAT_CLASSID,&MAT_MatMultTransposeSymbolic);CHKERRQ(ierr);
152   ierr = PetscLogEventRegister("MatMatMultTrnNum", MAT_CLASSID,&MAT_MatMultTransposeNumeric);CHKERRQ(ierr);
153   ierr = PetscLogEventRegister("MatGetRedundant",  MAT_CLASSID,&MAT_GetRedundantMatrix);CHKERRQ(ierr);
154   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
155   ierr = PetscLogEventRegister("MatGetMultiProcBlock", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
156 
157   /* these may be specific to MPIAIJ matrices */
158   ierr = PetscLogEventRegister("MatMerge_SeqsToMPINumeric",MAT_CLASSID,&MAT_Seqstompinum);
159   ierr = PetscLogEventRegister("MatMerge_SeqsToMPISymbolic",MAT_CLASSID,&MAT_Seqstompisym);
160   ierr = PetscLogEventRegister("MatMerge_SeqsToMPI",MAT_CLASSID,&MAT_Seqstompi);
161   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);
162   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);
163   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);
164   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);
165 
166   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
167   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
168   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
169 
170   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
171   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
172   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
173   ierr = PetscLogEventRegister("MatCUSPCopyTo",MAT_CLASSID,&MAT_CUSPCopyToGPU);CHKERRQ(ierr);
174   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
175   ierr = PetscLogEventRegister("MatSetValBatch1",MAT_CLASSID,&MAT_SetValuesBatchI);CHKERRQ(ierr);
176   ierr = PetscLogEventRegister("MatSetValBatch2",MAT_CLASSID,&MAT_SetValuesBatchII);CHKERRQ(ierr);
177   ierr = PetscLogEventRegister("MatSetValBatch3",MAT_CLASSID,&MAT_SetValuesBatchIII);CHKERRQ(ierr);
178   ierr = PetscLogEventRegister("MatSetValBatch4",MAT_CLASSID,&MAT_SetValuesBatchIV);CHKERRQ(ierr);
179 
180   /* Turn off high traffic events by default */
181   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
182   /* Process info exclusions */
183   ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
184   if (opt) {
185     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
186     if (className) {
187       ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
188     }
189   }
190   /* Process summary exclusions */
191   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
192   if (opt) {
193     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
194     if (className) {
195       ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
196     }
197   }
198   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
199   PetscFunctionReturn(0);
200 }
201 
202 #ifdef PETSC_USE_DYNAMIC_LIBRARIES
203 EXTERN_C_BEGIN
204 #undef __FUNCT__
205 #define __FUNCT__ "PetscDLLibraryRegister_petscmat"
206 /*
207   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
208 
209   This one registers all the matrix methods that are in the basic PETSc Matrix library.
210 
211   Input Parameter:
212   path - library path
213  */
214 PetscErrorCode  PetscDLLibraryRegister_petscmat(const char path[])
215 {
216   PetscErrorCode ierr;
217 
218   PetscFunctionBegin;
219   ierr = MatInitializePackage(path);CHKERRQ(ierr);
220   PetscFunctionReturn(0);
221 }
222 EXTERN_C_END
223 
224 
225 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
226