1 #include <petsc/private/sfimpl.h> 2 3 static PetscBool PetscSFPackageInitialized = PETSC_FALSE; 4 5 PetscClassId PETSCSF_CLASSID; 6 7 PetscLogEvent PETSCSF_SetGraph; 8 PetscLogEvent PETSCSF_SetUp; 9 PetscLogEvent PETSCSF_BcastBegin; 10 PetscLogEvent PETSCSF_BcastEnd; 11 PetscLogEvent PETSCSF_ReduceBegin; 12 PetscLogEvent PETSCSF_ReduceEnd; 13 PetscLogEvent PETSCSF_FetchAndOpBegin; 14 PetscLogEvent PETSCSF_FetchAndOpEnd; 15 PetscLogEvent PETSCSF_EmbedSF; 16 PetscLogEvent PETSCSF_DistSect; 17 PetscLogEvent PETSCSF_SectSF; 18 PetscLogEvent PETSCSF_RemoteOff; 19 PetscLogEvent PETSCSF_Pack; 20 PetscLogEvent PETSCSF_Unpack; 21 22 /*@C 23 PetscSFInitializePackage - Initialize SF package 24 25 Logically Collective 26 27 Level: developer 28 29 .seealso: `PetscSFFinalizePackage()` 30 @*/ 31 PetscErrorCode PetscSFInitializePackage(void) { 32 char logList[256]; 33 PetscBool opt, pkg; 34 35 PetscFunctionBegin; 36 if (PetscSFPackageInitialized) PetscFunctionReturn(0); 37 PetscSFPackageInitialized = PETSC_TRUE; 38 /* Register Class */ 39 PetscCall(PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID)); 40 /* Register Constructors */ 41 PetscCall(PetscSFRegisterAll()); 42 /* Register Events */ 43 PetscCall(PetscLogEventRegister("SFSetGraph", PETSCSF_CLASSID, &PETSCSF_SetGraph)); 44 PetscCall(PetscLogEventRegister("SFSetUp", PETSCSF_CLASSID, &PETSCSF_SetUp)); 45 PetscCall(PetscLogEventRegister("SFBcastBegin", PETSCSF_CLASSID, &PETSCSF_BcastBegin)); 46 PetscCall(PetscLogEventRegister("SFBcastEnd", PETSCSF_CLASSID, &PETSCSF_BcastEnd)); 47 PetscCall(PetscLogEventRegister("SFReduceBegin", PETSCSF_CLASSID, &PETSCSF_ReduceBegin)); 48 PetscCall(PetscLogEventRegister("SFReduceEnd", PETSCSF_CLASSID, &PETSCSF_ReduceEnd)); 49 PetscCall(PetscLogEventRegister("SFFetchOpBegin", PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin)); 50 PetscCall(PetscLogEventRegister("SFFetchOpEnd", PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd)); 51 PetscCall(PetscLogEventRegister("SFCreateEmbed", PETSCSF_CLASSID, &PETSCSF_EmbedSF)); 52 PetscCall(PetscLogEventRegister("SFDistSection", PETSCSF_CLASSID, &PETSCSF_DistSect)); 53 PetscCall(PetscLogEventRegister("SFSectionSF", PETSCSF_CLASSID, &PETSCSF_SectSF)); 54 PetscCall(PetscLogEventRegister("SFRemoteOff", PETSCSF_CLASSID, &PETSCSF_RemoteOff)); 55 PetscCall(PetscLogEventRegister("SFPack", PETSCSF_CLASSID, &PETSCSF_Pack)); 56 PetscCall(PetscLogEventRegister("SFUnpack", PETSCSF_CLASSID, &PETSCSF_Unpack)); 57 /* Process Info */ 58 { 59 PetscClassId classids[1]; 60 61 classids[0] = PETSCSF_CLASSID; 62 PetscCall(PetscInfoProcessClass("sf", 1, classids)); 63 } 64 /* Process summary exclusions */ 65 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 66 if (opt) { 67 PetscCall(PetscStrInList("sf", logList, ',', &pkg)); 68 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID)); 69 } 70 /* Register package finalizer */ 71 PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage)); 72 PetscFunctionReturn(0); 73 } 74 75 /*@C 76 PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize() 77 78 Logically Collective 79 80 Level: developer 81 82 .seealso: `PetscSFInitializePackage()` 83 @*/ 84 PetscErrorCode PetscSFFinalizePackage(void) { 85 PetscFunctionBegin; 86 PetscCall(PetscFunctionListDestroy(&PetscSFList)); 87 PetscSFPackageInitialized = PETSC_FALSE; 88 PetscSFRegisterAllCalled = PETSC_FALSE; 89 PetscFunctionReturn(0); 90 } 91