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