1af0996ceSBarry Smith #include <petsc/private/sfimpl.h> 295fce210SBarry Smith 395fce210SBarry Smith static PetscBool PetscSFPackageInitialized = PETSC_FALSE; 495fce210SBarry Smith 529046d53SLisandro Dalcin PetscClassId PETSCSF_CLASSID; 629046d53SLisandro Dalcin 729046d53SLisandro Dalcin PetscLogEvent PETSCSF_SetGraph; 829046d53SLisandro Dalcin PetscLogEvent PETSCSF_SetUp; 929046d53SLisandro Dalcin PetscLogEvent PETSCSF_BcastBegin; 1029046d53SLisandro Dalcin PetscLogEvent PETSCSF_BcastEnd; 1129046d53SLisandro Dalcin PetscLogEvent PETSCSF_ReduceBegin; 1229046d53SLisandro Dalcin PetscLogEvent PETSCSF_ReduceEnd; 1329046d53SLisandro Dalcin PetscLogEvent PETSCSF_FetchAndOpBegin; 1429046d53SLisandro Dalcin PetscLogEvent PETSCSF_FetchAndOpEnd; 15524e35f8SStefano Zampini PetscLogEvent PETSCSF_EmbedSF; 16524e35f8SStefano Zampini PetscLogEvent PETSCSF_DistSect; 17524e35f8SStefano Zampini PetscLogEvent PETSCSF_SectSF; 18524e35f8SStefano Zampini PetscLogEvent PETSCSF_RemoteOff; 19cd620004SJunchao Zhang PetscLogEvent PETSCSF_Pack; 20cd620004SJunchao Zhang PetscLogEvent PETSCSF_Unpack; 2195fce210SBarry Smith 2295fce210SBarry Smith /*@C 2395fce210SBarry Smith PetscSFInitializePackage - Initialize SF package 2495fce210SBarry Smith 2595fce210SBarry Smith Logically Collective 2695fce210SBarry Smith 2795fce210SBarry Smith Level: developer 2895fce210SBarry Smith 2995fce210SBarry Smith .seealso: PetscSFFinalizePackage() 3095fce210SBarry Smith @*/ 31607a6623SBarry Smith PetscErrorCode PetscSFInitializePackage(void) 3295fce210SBarry Smith { 3329046d53SLisandro Dalcin char logList[256]; 348e81d068SLisandro Dalcin PetscBool opt,pkg; 3595fce210SBarry Smith 3695fce210SBarry Smith PetscFunctionBegin; 3795fce210SBarry Smith if (PetscSFPackageInitialized) PetscFunctionReturn(0); 3895fce210SBarry Smith PetscSFPackageInitialized = PETSC_TRUE; 398e81d068SLisandro Dalcin /* Register Class */ 40*9566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID)); 418e81d068SLisandro Dalcin /* Register Constructors */ 42*9566063dSJacob Faibussowitsch PetscCall(PetscSFRegisterAll()); 438e81d068SLisandro Dalcin /* Register Events */ 44*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSetGraph" , PETSCSF_CLASSID, &PETSCSF_SetGraph)); 45*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSetUp" , PETSCSF_CLASSID, &PETSCSF_SetUp)); 46*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFBcastBegin" , PETSCSF_CLASSID, &PETSCSF_BcastBegin)); 47*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFBcastEnd" , PETSCSF_CLASSID, &PETSCSF_BcastEnd)); 48*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFReduceBegin" , PETSCSF_CLASSID, &PETSCSF_ReduceBegin)); 49*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFReduceEnd" , PETSCSF_CLASSID, &PETSCSF_ReduceEnd)); 50*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFFetchOpBegin" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin)); 51*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFFetchOpEnd" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd)); 52*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFCreateEmbed" , PETSCSF_CLASSID, &PETSCSF_EmbedSF)); 53*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFDistSection" , PETSCSF_CLASSID, &PETSCSF_DistSect)); 54*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSectionSF" , PETSCSF_CLASSID, &PETSCSF_SectSF)); 55*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFRemoteOff" , PETSCSF_CLASSID, &PETSCSF_RemoteOff)); 56*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFPack" , PETSCSF_CLASSID, &PETSCSF_Pack)); 57*9566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFUnpack" , PETSCSF_CLASSID, &PETSCSF_Unpack)); 58e94e781bSJacob Faibussowitsch /* Process Info */ 59e94e781bSJacob Faibussowitsch { 60e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 61e94e781bSJacob Faibussowitsch 62e94e781bSJacob Faibussowitsch classids[0] = PETSCSF_CLASSID; 63*9566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sf", 1, classids)); 6429046d53SLisandro Dalcin } 6529046d53SLisandro Dalcin /* Process summary exclusions */ 66*9566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 6729046d53SLisandro Dalcin if (opt) { 68*9566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sf",logList,',',&pkg)); 69*9566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID)); 7029046d53SLisandro Dalcin } 718e81d068SLisandro Dalcin /* Register package finalizer */ 72*9566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage)); 7395fce210SBarry Smith PetscFunctionReturn(0); 7495fce210SBarry Smith } 7595fce210SBarry Smith 7695fce210SBarry Smith /*@C 7795fce210SBarry Smith PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize() 7895fce210SBarry Smith 7995fce210SBarry Smith Logically Collective 8095fce210SBarry Smith 8195fce210SBarry Smith Level: developer 8295fce210SBarry Smith 8395fce210SBarry Smith .seealso: PetscSFInitializePackage() 8495fce210SBarry Smith @*/ 8595fce210SBarry Smith PetscErrorCode PetscSFFinalizePackage(void) 8695fce210SBarry Smith { 8795fce210SBarry Smith PetscFunctionBegin; 88*9566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscSFList)); 8995fce210SBarry Smith PetscSFPackageInitialized = PETSC_FALSE; 9093ef888dSBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 9195fce210SBarry Smith PetscFunctionReturn(0); 9295fce210SBarry Smith } 93