1*e8597998SBarry Smith 2*e8597998SBarry Smith #include <petsc-private/daimpl.h> 3*e8597998SBarry Smith #include <petsc-private/pleximpl.h> 4*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 5*e8597998SBarry Smith #include <petsc-private/meshimpl.h> 6*e8597998SBarry Smith #endif 7*e8597998SBarry Smith 8*e8597998SBarry Smith static PetscBool DMPackageInitialized = PETSC_FALSE; 9*e8597998SBarry Smith #undef __FUNCT__ 10*e8597998SBarry Smith #define __FUNCT__ "DMFinalizePackage" 11*e8597998SBarry Smith /*@C 12*e8597998SBarry Smith DMFinalizePackage - This function finalizes everything in the DM package. It is called 13*e8597998SBarry Smith from PetscFinalize(). 14*e8597998SBarry Smith 15*e8597998SBarry Smith Level: developer 16*e8597998SBarry Smith 17*e8597998SBarry Smith .keywords: AO, initialize, package 18*e8597998SBarry Smith .seealso: PetscInitialize() 19*e8597998SBarry Smith @*/ 20*e8597998SBarry Smith PetscErrorCode DMFinalizePackage(void) 21*e8597998SBarry Smith { 22*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 23*e8597998SBarry Smith PetscErrorCode ierr; 24*e8597998SBarry Smith #endif 25*e8597998SBarry Smith 26*e8597998SBarry Smith PetscFunctionBegin; 27*e8597998SBarry Smith DMPackageInitialized = PETSC_FALSE; 28*e8597998SBarry Smith DMList = NULL; 29*e8597998SBarry Smith DMRegisterAllCalled = PETSC_FALSE; 30*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 31*e8597998SBarry Smith ierr = DMMeshFinalize();CHKERRQ(ierr); 32*e8597998SBarry Smith #endif 33*e8597998SBarry Smith PetscFunctionReturn(0); 34*e8597998SBarry Smith } 35*e8597998SBarry Smith 36*e8597998SBarry Smith #if defined(PETSC_HAVE_HYPRE) 37*e8597998SBarry Smith EXTERN_C_BEGIN 38*e8597998SBarry Smith extern PetscErrorCode MatCreate_HYPREStruct(Mat); 39*e8597998SBarry Smith EXTERN_C_END 40*e8597998SBarry Smith #endif 41*e8597998SBarry Smith 42*e8597998SBarry Smith #undef __FUNCT__ 43*e8597998SBarry Smith #define __FUNCT__ "DMInitializePackage" 44*e8597998SBarry Smith /*@C 45*e8597998SBarry Smith DMInitializePackage - This function initializes everything in the DM package. It is called 46*e8597998SBarry Smith from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 47*e8597998SBarry Smith or DMDACreate() when using static libraries. 48*e8597998SBarry Smith 49*e8597998SBarry Smith Input Parameter: 50*e8597998SBarry Smith path - The dynamic library path, or NULL 51*e8597998SBarry Smith 52*e8597998SBarry Smith Level: developer 53*e8597998SBarry Smith 54*e8597998SBarry Smith .keywords: AO, initialize, package 55*e8597998SBarry Smith .seealso: PetscInitialize() 56*e8597998SBarry Smith @*/ 57*e8597998SBarry Smith PetscErrorCode DMInitializePackage(const char path[]) 58*e8597998SBarry Smith { 59*e8597998SBarry Smith char logList[256]; 60*e8597998SBarry Smith char *className; 61*e8597998SBarry Smith PetscBool opt; 62*e8597998SBarry Smith PetscErrorCode ierr; 63*e8597998SBarry Smith 64*e8597998SBarry Smith PetscFunctionBegin; 65*e8597998SBarry Smith if (DMPackageInitialized) PetscFunctionReturn(0); 66*e8597998SBarry Smith DMPackageInitialized = PETSC_TRUE; 67*e8597998SBarry Smith 68*e8597998SBarry Smith /* Register Classes */ 69*e8597998SBarry Smith ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 70*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 71*e8597998SBarry Smith ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr); 72*e8597998SBarry Smith ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr); 73*e8597998SBarry Smith #endif 74*e8597998SBarry Smith 75*e8597998SBarry Smith #if defined(PETSC_HAVE_HYPRE) 76*e8597998SBarry Smith ierr = MatRegisterDynamic(MATHYPRESTRUCT, path,"MatCreate_HYPREStruct", MatCreate_HYPREStruct);CHKERRQ(ierr); 77*e8597998SBarry Smith #endif 78*e8597998SBarry Smith 79*e8597998SBarry Smith /* Register Constructors */ 80*e8597998SBarry Smith ierr = DMRegisterAll(path);CHKERRQ(ierr); 81*e8597998SBarry Smith /* Register Events */ 82*e8597998SBarry Smith ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 83*e8597998SBarry Smith ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 84*e8597998SBarry Smith ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 85*e8597998SBarry Smith 86*e8597998SBarry Smith ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 87*e8597998SBarry Smith 88*e8597998SBarry Smith ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 89*e8597998SBarry Smith ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 90*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 91*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);CHKERRQ(ierr); 92*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr); 93*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr); 94*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr); 95*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr); 96*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr); 97*e8597998SBarry Smith ierr = PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr); 98*e8597998SBarry Smith ierr = PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr); 99*e8597998SBarry Smith ierr = PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr); 100*e8597998SBarry Smith #endif 101*e8597998SBarry Smith /* Process info exclusions */ 102*e8597998SBarry Smith ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 103*e8597998SBarry Smith if (opt) { 104*e8597998SBarry Smith ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 105*e8597998SBarry Smith if (className) { 106*e8597998SBarry Smith ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 107*e8597998SBarry Smith } 108*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 109*e8597998SBarry Smith ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 110*e8597998SBarry Smith if (className) { 111*e8597998SBarry Smith ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 112*e8597998SBarry Smith } 113*e8597998SBarry Smith ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 114*e8597998SBarry Smith if (className) { 115*e8597998SBarry Smith ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 116*e8597998SBarry Smith } 117*e8597998SBarry Smith #endif 118*e8597998SBarry Smith } 119*e8597998SBarry Smith /* Process summary exclusions */ 120*e8597998SBarry Smith ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 121*e8597998SBarry Smith if (opt) { 122*e8597998SBarry Smith ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 123*e8597998SBarry Smith if (className) { 124*e8597998SBarry Smith ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 125*e8597998SBarry Smith } 126*e8597998SBarry Smith #if defined(PETSC_HAVE_SIEVE) 127*e8597998SBarry Smith ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 128*e8597998SBarry Smith if (className) { 129*e8597998SBarry Smith ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 130*e8597998SBarry Smith } 131*e8597998SBarry Smith ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 132*e8597998SBarry Smith if (className) { 133*e8597998SBarry Smith ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 134*e8597998SBarry Smith } 135*e8597998SBarry Smith #endif 136*e8597998SBarry Smith } 137*e8597998SBarry Smith ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 138*e8597998SBarry Smith PetscFunctionReturn(0); 139*e8597998SBarry Smith } 140*e8597998SBarry Smith 141*e8597998SBarry Smith 142*e8597998SBarry Smith 143*e8597998SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 144*e8597998SBarry Smith EXTERN_C_BEGIN 145*e8597998SBarry Smith #undef __FUNCT__ 146*e8597998SBarry Smith #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 147*e8597998SBarry Smith /* 148*e8597998SBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 149*e8597998SBarry Smith 150*e8597998SBarry Smith This one registers all the mesh generators and partitioners that are in 151*e8597998SBarry Smith the basic DM library. 152*e8597998SBarry Smith 153*e8597998SBarry Smith Input Parameter: 154*e8597998SBarry Smith path - library path 155*e8597998SBarry Smith */ 156*e8597998SBarry Smith PetscErrorCode PetscDLLibraryRegister_petscdm(const char path[]) 157*e8597998SBarry Smith { 158*e8597998SBarry Smith PetscErrorCode ierr; 159*e8597998SBarry Smith 160*e8597998SBarry Smith PetscFunctionBegin; 161*e8597998SBarry Smith ierr = AOInitializePackage(path);CHKERRQ(ierr); 162*e8597998SBarry Smith ierr = DMInitializePackage(path);CHKERRQ(ierr); 163*e8597998SBarry Smith PetscFunctionReturn(0); 164*e8597998SBarry Smith } 165*e8597998SBarry Smith EXTERN_C_END 166*e8597998SBarry Smith 167*e8597998SBarry Smith #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 168