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