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