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