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