xref: /petsc/src/mat/interface/dlregismat.c (revision f3fe499b4cc4d64bf04aa4f5e4963dcc4eb56541)
1 #define PETSCMAT_DLL
2 
3 #include "private/matimpl.h"
4 
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","SPD","MatOption","MAT_",0};
17 const char *MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
18 
19 EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMFFDInitializePackage(const char[]);
20 static PetscTruth 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 PETSC_DLLEXPORT MatFinalizePackage(void)
33 {
34   PetscFunctionBegin;
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   PetscFunctionReturn(0);
45 }
46 
47 #undef __FUNCT__
48 #define __FUNCT__ "MatInitializePackage"
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.
53 
54   Input Parameter:
55   path - The dynamic library path, or PETSC_NULL
56 
57   Level: developer
58 
59 .keywords: Mat, initialize, package
60 .seealso: PetscInitialize()
61 @*/
62 PetscErrorCode PETSCMAT_DLLEXPORT MatInitializePackage(const char path[])
63 {
64   char              logList[256];
65   char              *className;
66   PetscTruth        opt;
67   PetscErrorCode    ierr;
68 
69   PetscFunctionBegin;
70   if (MatPackageInitialized) PetscFunctionReturn(0);
71   MatPackageInitialized = PETSC_TRUE;
72   /* Inialize subpackage */
73   ierr = MatMFFDInitializePackage(path);CHKERRQ(ierr);
74   /* Register Classes */
75   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
76   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
77   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
78   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
79   /* Register Constructors */
80   ierr = MatRegisterAll(path);CHKERRQ(ierr);
81   ierr = MatOrderingRegisterAll(path);CHKERRQ(ierr);
82   ierr = MatColoringRegisterAll(path);CHKERRQ(ierr);
83   ierr = MatPartitioningRegisterAll(path);CHKERRQ(ierr);
84   /* Register Events */
85   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
90   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
91   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
93   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
94   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
95   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
96   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
97   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
98   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
99   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
100   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
101   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
102   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
103   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
104   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
105   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
106   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
107   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
108   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
109   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
110   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
111   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
112   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
113   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
114   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
115   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
116   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
117   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
118   ierr = PetscLogEventRegister("MatGetSubMatrice", MAT_CLASSID,&MAT_GetSubMatrices);CHKERRQ(ierr);
119   ierr = PetscLogEventRegister("MatGetColoring",   MAT_CLASSID,&MAT_GetColoring);CHKERRQ(ierr);
120   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
121   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
122   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
123   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
124   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
125   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
126   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
127   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
128   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
129   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
130   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
131   ierr = PetscLogEventRegister("MatMatMult",       MAT_CLASSID,&MAT_MatMult);CHKERRQ(ierr);
132   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
133   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
134   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
135   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
136   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
137   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
138   ierr = PetscLogEventRegister("MatMatMultTrans",  MAT_CLASSID,&MAT_MatMultTranspose);CHKERRQ(ierr);
139   ierr = PetscLogEventRegister("MatMatMultTrnSym" ,MAT_CLASSID,&MAT_MatMultTransposeSymbolic);CHKERRQ(ierr);
140   ierr = PetscLogEventRegister("MatMatMultTrnNum", MAT_CLASSID,&MAT_MatMultTransposeNumeric);CHKERRQ(ierr);
141   ierr = PetscLogEventRegister("MatGetRedundant",  MAT_CLASSID,&MAT_GetRedundantMatrix);CHKERRQ(ierr);
142   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
143 
144   /* these may be specific to MPIAIJ matrices */
145   ierr = PetscLogEventRegister("MatMerge_SeqsToMPINumeric",MAT_CLASSID,&MAT_Seqstompinum);
146   ierr = PetscLogEventRegister("MatMerge_SeqsToMPISymbolic",MAT_CLASSID,&MAT_Seqstompisym);
147   ierr = PetscLogEventRegister("MatMerge_SeqsToMPI",MAT_CLASSID,&MAT_Seqstompi);
148   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);
149   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);
150   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);
151   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);
152 
153   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
154   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
155   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
156 
157   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
158   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
159   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
160 
161   /* Turn off high traffic events by default */
162   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
163   /* Process info exclusions */
164   ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
165   if (opt) {
166     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
167     if (className) {
168       ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
169     }
170   }
171   /* Process summary exclusions */
172   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
173   if (opt) {
174     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
175     if (className) {
176       ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
177     }
178   }
179   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
180   PetscFunctionReturn(0);
181 }
182 
183 #ifdef PETSC_USE_DYNAMIC_LIBRARIES
184 EXTERN_C_BEGIN
185 #undef __FUNCT__
186 #define __FUNCT__ "PetscDLLibraryRegister_petscmat"
187 /*
188   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
189 
190   This one registers all the matrix methods that are in the basic PETSc Matrix library.
191 
192   Input Parameter:
193   path - library path
194  */
195 PetscErrorCode PETSCMAT_DLLEXPORT PetscDLLibraryRegister_petscmat(const char path[])
196 {
197   PetscErrorCode ierr;
198 
199   PetscFunctionBegin;
200   ierr = MatInitializePackage(path);CHKERRQ(ierr);
201   PetscFunctionReturn(0);
202 }
203 EXTERN_C_END
204 
205 
206 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
207