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