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 23*cab54364SBarry Smith PetscSFInitializePackage - Initialize `PetscSF` package 2495fce210SBarry Smith 2595fce210SBarry Smith Logically Collective 2695fce210SBarry Smith 2795fce210SBarry Smith Level: developer 2895fce210SBarry Smith 29*cab54364SBarry Smith .seealso: `PetscSF`, `PetscSFFinalizePackage()` 3095fce210SBarry Smith @*/ 31d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSFInitializePackage(void) 32d71ae5a4SJacob Faibussowitsch { 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 */ 409566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID)); 418e81d068SLisandro Dalcin /* Register Constructors */ 429566063dSJacob Faibussowitsch PetscCall(PetscSFRegisterAll()); 438e81d068SLisandro Dalcin /* Register Events */ 449566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSetGraph", PETSCSF_CLASSID, &PETSCSF_SetGraph)); 459566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSetUp", PETSCSF_CLASSID, &PETSCSF_SetUp)); 469566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFBcastBegin", PETSCSF_CLASSID, &PETSCSF_BcastBegin)); 479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFBcastEnd", PETSCSF_CLASSID, &PETSCSF_BcastEnd)); 489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFReduceBegin", PETSCSF_CLASSID, &PETSCSF_ReduceBegin)); 499566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFReduceEnd", PETSCSF_CLASSID, &PETSCSF_ReduceEnd)); 509566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFFetchOpBegin", PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin)); 519566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFFetchOpEnd", PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd)); 529566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFCreateEmbed", PETSCSF_CLASSID, &PETSCSF_EmbedSF)); 539566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFDistSection", PETSCSF_CLASSID, &PETSCSF_DistSect)); 549566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFSectionSF", PETSCSF_CLASSID, &PETSCSF_SectSF)); 559566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFRemoteOff", PETSCSF_CLASSID, &PETSCSF_RemoteOff)); 569566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("SFPack", PETSCSF_CLASSID, &PETSCSF_Pack)); 579566063dSJacob 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; 639566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sf", 1, classids)); 6429046d53SLisandro Dalcin } 6529046d53SLisandro Dalcin /* Process summary exclusions */ 669566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 6729046d53SLisandro Dalcin if (opt) { 689566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sf", logList, ',', &pkg)); 699566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID)); 7029046d53SLisandro Dalcin } 718e81d068SLisandro Dalcin /* Register package finalizer */ 729566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage)); 7395fce210SBarry Smith PetscFunctionReturn(0); 7495fce210SBarry Smith } 7595fce210SBarry Smith 7695fce210SBarry Smith /*@C 77*cab54364SBarry Smith PetscSFFinalizePackage - Finalize `PetscSF` package, it is called from `PetscFinalize()` 7895fce210SBarry Smith 7995fce210SBarry Smith Logically Collective 8095fce210SBarry Smith 8195fce210SBarry Smith Level: developer 8295fce210SBarry Smith 83*cab54364SBarry Smith .seealso: `PetscSF`, `PetscSFInitializePackage()` 8495fce210SBarry Smith @*/ 85d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSFFinalizePackage(void) 86d71ae5a4SJacob Faibussowitsch { 8795fce210SBarry Smith PetscFunctionBegin; 889566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscSFList)); 8995fce210SBarry Smith PetscSFPackageInitialized = PETSC_FALSE; 9093ef888dSBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 9195fce210SBarry Smith PetscFunctionReturn(0); 9295fce210SBarry Smith } 93