xref: /petsc/src/mat/interface/dlregismat.c (revision 1bb69edbc2f6efc8bcb8b8b24da8e7bcfef7c08b)
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 #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   ierr = PetscLogEventRegister(&MAT_GetRedundantMatrix,       "MAT_GetRedundantMatrix",MAT_COOKIE);CHKERRQ(ierr);
110   /* Turn off high traffic events by default */
111   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
112   /* Process info exclusions */
113   ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
114   if (opt) {
115     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
116     if (className) {
117       ierr = PetscInfoDeactivateClass(MAT_COOKIE);CHKERRQ(ierr);
118     }
119   }
120   /* Process summary exclusions */
121   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
122   if (opt) {
123     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
124     if (className) {
125       ierr = PetscLogEventDeactivateClass(MAT_COOKIE);CHKERRQ(ierr);
126     }
127   }
128   PetscFunctionReturn(0);
129 }
130 
131 #ifdef PETSC_USE_DYNAMIC_LIBRARIES
132 EXTERN_C_BEGIN
133 #undef __FUNCT__
134 #define __FUNCT__ "PetscDLLibraryRegister_petscmat"
135 /*
136   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
137 
138   This one registers all the matrix methods that are in the basic PETSc Matrix library.
139 
140   Input Parameter:
141   path - library path
142  */
143 PetscErrorCode PETSCMAT_DLLEXPORT PetscDLLibraryRegister_petscmat(char *path)
144 {
145   PetscErrorCode ierr;
146 
147   ierr = PetscInitializeNoArguments(); if (ierr) return 1;
148 
149   PetscFunctionBegin;
150   /*
151       If we got here then PETSc was properly loaded
152   */
153   ierr = MatInitializePackage(path);CHKERRQ(ierr);
154   PetscFunctionReturn(0);
155 }
156 EXTERN_C_END
157 
158 
159 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
160