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