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