xref: /petsc/src/mat/interface/dlregismat.c (revision e3ed6ec877bedf4e837ee0c4ff2272f4487e99bf)
1 #define PETSCMAT_DLL
2 
3 #include "include/private/matimpl.h"
4 
5 const char *MatOptions[] = {"ROW_ORIENTED","COLUMN_ORIENTED","ROWS_SORTED",
6               "COLUMNS_SORTED","NO_NEW_NONZERO_LOCATIONS",
7               "YES_NEW_NONZERO_LOCATIONS","SYMMETRIC",
8               "STRUCTURALLY_SYMMETRIC","NO_NEW_DIAGONALS",
9               "YES_NEW_DIAGONALS","INODE_LIMIT_1","INODE_LIMIT_2",
10               "INODE_LIMIT_3","INODE_LIMIT_4","INODE_LIMIT_5",
11               "IGNORE_OFF_PROC_ENTRIES,ROWS_UNSORTED",
12               "COLUMNS_UNSORTED","NEW_NONZERO_LOCATION_ERR",
13               "NEW_NONZERO_ALLOCATION_ERR","USE_HASH_TABLE",
14               "KEEP_ZEROED_ROWS","IGNORE_ZERO_ENTRIES","USE_INODES",
15               "DO_NOT_USE_INODES","NOT_SYMMETRIC,HERMITIAN",
16               "NOT_STRUCTURALLY_SYMMETRIC","NOT_HERMITIAN",
17               "SYMMETRY_ETERNAL","NOT_SYMMETRY_ETERNAL",
18               "USE_COMPRESSEDROW","DO_NOT_USE_COMPRESSEDROW",
19               "IGNORE_LOWER_TRIANGULAR","ERROR_LOWER_TRIANGULAR","GETROW_UPPERTRIANGULAR","MatOption","MAT_",0};
20 
21 EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMFFDInitializePackage(const char[]);
22 
23 #undef __FUNCT__
24 #define __FUNCT__ "MatInitializePackage"
25 /*@C
26   MatInitializePackage - This function initializes everything in the Mat package. It is called
27   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
28   when using static libraries.
29 
30   Input Parameter:
31   path - The dynamic library path, or PETSC_NULL
32 
33   Level: developer
34 
35 .keywords: Mat, initialize, package
36 .seealso: PetscInitialize()
37 @*/
38 PetscErrorCode PETSCMAT_DLLEXPORT MatInitializePackage(const char path[])
39 {
40   static PetscTruth initialized = PETSC_FALSE;
41   char              logList[256];
42   char              *className;
43   PetscTruth        opt;
44   PetscErrorCode    ierr;
45 
46   PetscFunctionBegin;
47   /* Inialize subpackage */
48   ierr = MatMFFDInitializePackage(PETSC_NULL);CHKERRQ(ierr);
49   if (initialized) PetscFunctionReturn(0);
50   initialized = PETSC_TRUE;
51   /* Register Classes */
52   ierr = PetscLogClassRegister(&MAT_COOKIE,              "Matrix");CHKERRQ(ierr);
53   ierr = PetscLogClassRegister(&MAT_FDCOLORING_COOKIE,   "Matrix FD Coloring");CHKERRQ(ierr);
54   ierr = PetscLogClassRegister(&MAT_PARTITIONING_COOKIE, "Matrix Partitioning");CHKERRQ(ierr);
55   ierr = PetscLogClassRegister(&MAT_NULLSPACE_COOKIE,    "Matrix Null Space");CHKERRQ(ierr);
56   /* Register Constructors */
57   ierr = MatRegisterAll(path);CHKERRQ(ierr);
58   /* Register Events */
59   ierr = PetscLogEventRegister(&MAT_Mult,                     "MatMult",          MAT_COOKIE);CHKERRQ(ierr);
60   ierr = PetscLogEventRegister(&MAT_Mults,                    "MatMults",         MAT_COOKIE);CHKERRQ(ierr);
61   ierr = PetscLogEventRegister(&MAT_MultConstrained,          "MatMultConstr",    MAT_COOKIE);CHKERRQ(ierr);
62   ierr = PetscLogEventRegister(&MAT_MultAdd,                  "MatMultAdd",       MAT_COOKIE);CHKERRQ(ierr);
63   ierr = PetscLogEventRegister(&MAT_MultTranspose,            "MatMultTranspose", MAT_COOKIE);CHKERRQ(ierr);
64   ierr = PetscLogEventRegister(&MAT_MultTransposeConstrained, "MatMultTrConstr",  MAT_COOKIE);CHKERRQ(ierr);
65   ierr = PetscLogEventRegister(&MAT_MultTransposeAdd,         "MatMultTrAdd",     MAT_COOKIE);CHKERRQ(ierr);
66   ierr = PetscLogEventRegister(&MAT_Solve,                    "MatSolve",         MAT_COOKIE);CHKERRQ(ierr);
67   ierr = PetscLogEventRegister(&MAT_Solves,                   "MatSolves",        MAT_COOKIE);CHKERRQ(ierr);
68   ierr = PetscLogEventRegister(&MAT_SolveAdd,                 "MatSolveAdd",      MAT_COOKIE);CHKERRQ(ierr);
69   ierr = PetscLogEventRegister(&MAT_SolveTranspose,           "MatSolveTranspos", MAT_COOKIE);CHKERRQ(ierr);
70   ierr = PetscLogEventRegister(&MAT_SolveTransposeAdd,        "MatSolveTrAdd",    MAT_COOKIE);CHKERRQ(ierr);
71   ierr = PetscLogEventRegister(&MAT_Relax,                    "MatRelax",         MAT_COOKIE);CHKERRQ(ierr);
72   ierr = PetscLogEventRegister(&MAT_ForwardSolve,             "MatForwardSolve",  MAT_COOKIE);CHKERRQ(ierr);
73   ierr = PetscLogEventRegister(&MAT_BackwardSolve,            "MatBackwardSolve", MAT_COOKIE);CHKERRQ(ierr);
74   ierr = PetscLogEventRegister(&MAT_LUFactor,                 "MatLUFactor",      MAT_COOKIE);CHKERRQ(ierr);
75   ierr = PetscLogEventRegister(&MAT_LUFactorSymbolic,         "MatLUFactorSym",   MAT_COOKIE);CHKERRQ(ierr);
76   ierr = PetscLogEventRegister(&MAT_LUFactorNumeric,          "MatLUFactorNum",   MAT_COOKIE);CHKERRQ(ierr);
77   ierr = PetscLogEventRegister(&MAT_CholeskyFactor,           "MatCholeskyFctr",  MAT_COOKIE);CHKERRQ(ierr);
78   ierr = PetscLogEventRegister(&MAT_CholeskyFactorSymbolic,   "MatCholFctrSym",   MAT_COOKIE);CHKERRQ(ierr);
79   ierr = PetscLogEventRegister(&MAT_CholeskyFactorNumeric,    "MatCholFctrNum",   MAT_COOKIE);CHKERRQ(ierr);
80   ierr = PetscLogEventRegister(&MAT_ILUFactor,                "MatILUFactor",     MAT_COOKIE);CHKERRQ(ierr);
81   ierr = PetscLogEventRegister(&MAT_ILUFactorSymbolic,        "MatILUFactorSym",  MAT_COOKIE);CHKERRQ(ierr);
82   ierr = PetscLogEventRegister(&MAT_ICCFactorSymbolic,        "MatICCFactorSym",  MAT_COOKIE);CHKERRQ(ierr);
83   ierr = PetscLogEventRegister(&MAT_Copy,                     "MatCopy",          MAT_COOKIE);CHKERRQ(ierr);
84   ierr = PetscLogEventRegister(&MAT_Convert,                  "MatConvert",       MAT_COOKIE);CHKERRQ(ierr);
85   ierr = PetscLogEventRegister(&MAT_Scale,                    "MatScale",         MAT_COOKIE);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister(&MAT_AssemblyBegin,            "MatAssemblyBegin", MAT_COOKIE);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister(&MAT_AssemblyEnd,              "MatAssemblyEnd",   MAT_COOKIE);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister(&MAT_SetValues,                "MatSetValues",     MAT_COOKIE);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister(&MAT_GetValues,                "MatGetValues",     MAT_COOKIE);CHKERRQ(ierr);
90   ierr = PetscLogEventRegister(&MAT_GetRow,                   "MatGetRow",        MAT_COOKIE);CHKERRQ(ierr);
91   ierr = PetscLogEventRegister(&MAT_GetRowIJ,                 "MatGetRowIJ",      MAT_COOKIE);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister(&MAT_GetSubMatrices,           "MatGetSubMatrice", MAT_COOKIE);CHKERRQ(ierr);
93   ierr = PetscLogEventRegister(&MAT_GetColoring,              "MatGetColoring",   MAT_COOKIE);CHKERRQ(ierr);
94   ierr = PetscLogEventRegister(&MAT_GetOrdering,              "MatGetOrdering",   MAT_COOKIE);CHKERRQ(ierr);
95   ierr = PetscLogEventRegister(&MAT_IncreaseOverlap,          "MatIncreaseOvrlp", MAT_COOKIE);CHKERRQ(ierr);
96   ierr = PetscLogEventRegister(&MAT_Partitioning,             "MatPartitioning",  MAT_PARTITIONING_COOKIE);CHKERRQ(ierr);
97   ierr = PetscLogEventRegister(&MAT_ZeroEntries,              "MatZeroEntries",   MAT_COOKIE);CHKERRQ(ierr);
98   ierr = PetscLogEventRegister(&MAT_Load,                     "MatLoad",          MAT_COOKIE);CHKERRQ(ierr);
99   ierr = PetscLogEventRegister(&MAT_View,                     "MatView",          MAT_COOKIE);CHKERRQ(ierr);
100   ierr = PetscLogEventRegister(&MAT_AXPY,                     "MatAXPY",          MAT_COOKIE);CHKERRQ(ierr);
101   ierr = PetscLogEventRegister(&MAT_FDColoringCreate,         "MatFDColorCreate", MAT_FDCOLORING_COOKIE);CHKERRQ(ierr);
102   ierr = PetscLogEventRegister(&MAT_FDColoringApply,          "MatFDColorApply",  MAT_FDCOLORING_COOKIE);CHKERRQ(ierr);
103   ierr = PetscLogEventRegister(&MAT_FDColoringFunction,       "MatFDColorFunc",   MAT_FDCOLORING_COOKIE);CHKERRQ(ierr);
104   ierr = PetscLogEventRegister(&MAT_Transpose,                "MatTranspose",     MAT_COOKIE);CHKERRQ(ierr);
105   ierr = PetscLogEventRegister(&MAT_MatMult,                  "MatMatMult",       MAT_COOKIE);CHKERRQ(ierr);
106   ierr = PetscLogEventRegister(&MAT_MatMultSymbolic,          "MatMatMultSym",    MAT_COOKIE);CHKERRQ(ierr);
107   ierr = PetscLogEventRegister(&MAT_MatMultNumeric,           "MatMatMultNum",    MAT_COOKIE);CHKERRQ(ierr);
108   ierr = PetscLogEventRegister(&MAT_PtAP,                     "MatPtAP",          MAT_COOKIE);CHKERRQ(ierr);
109   ierr = PetscLogEventRegister(&MAT_PtAPSymbolic,             "MatPtAPSymbolic",  MAT_COOKIE);CHKERRQ(ierr);
110   ierr = PetscLogEventRegister(&MAT_PtAPNumeric,              "MatPtAPNumeric",   MAT_COOKIE);CHKERRQ(ierr);
111   ierr = PetscLogEventRegister(&MAT_MatMultTranspose,         "MatMatMultTrans",  MAT_COOKIE);CHKERRQ(ierr);
112   ierr = PetscLogEventRegister(&MAT_MatMultTransposeSymbolic, "MatMatMultTrnSym" ,MAT_COOKIE);CHKERRQ(ierr);
113   ierr = PetscLogEventRegister(&MAT_MatMultTransposeNumeric,  "MatMatMultTrnNum", MAT_COOKIE);CHKERRQ(ierr);
114   ierr = PetscLogEventRegister(&MAT_GetRedundantMatrix,       "MAT_GetRedundantMatrix",MAT_COOKIE);CHKERRQ(ierr);
115   /* Turn off high traffic events by default */
116   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
117   /* Process info exclusions */
118   ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
119   if (opt) {
120     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
121     if (className) {
122       ierr = PetscInfoDeactivateClass(MAT_COOKIE);CHKERRQ(ierr);
123     }
124   }
125   /* Process summary exclusions */
126   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
127   if (opt) {
128     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
129     if (className) {
130       ierr = PetscLogEventDeactivateClass(MAT_COOKIE);CHKERRQ(ierr);
131     }
132   }
133   PetscFunctionReturn(0);
134 }
135 
136 #ifdef PETSC_USE_DYNAMIC_LIBRARIES
137 EXTERN_C_BEGIN
138 #undef __FUNCT__
139 #define __FUNCT__ "PetscDLLibraryRegister_petscmat"
140 /*
141   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
142 
143   This one registers all the matrix methods that are in the basic PETSc Matrix library.
144 
145   Input Parameter:
146   path - library path
147  */
148 PetscErrorCode PETSCMAT_DLLEXPORT PetscDLLibraryRegister_petscmat(const char path[])
149 {
150   PetscErrorCode ierr;
151 
152   ierr = PetscInitializeNoArguments(); if (ierr) return 1;
153 
154   PetscFunctionBegin;
155   /*
156       If we got here then PETSc was properly loaded
157   */
158   ierr = MatInitializePackage(path);CHKERRQ(ierr);
159   PetscFunctionReturn(0);
160 }
161 EXTERN_C_END
162 
163 
164 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
165