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 23cab54364SBarry Smith PetscSFInitializePackage - Initialize `PetscSF` package 2495fce210SBarry Smith 2595fce210SBarry Smith Logically Collective 2695fce210SBarry Smith 2795fce210SBarry Smith Level: developer 2895fce210SBarry Smith 29cab54364SBarry 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; 373ba16761SJacob Faibussowitsch if (PetscSFPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 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)); 58*8063175fSStefano Zampini /* Flag non-collective events */ 59*8063175fSStefano Zampini PetscCall(PetscLogEventSetCollective(PETSCSF_Pack, PETSC_FALSE)); 60*8063175fSStefano Zampini PetscCall(PetscLogEventSetCollective(PETSCSF_Unpack, PETSC_FALSE)); 61*8063175fSStefano Zampini 62e94e781bSJacob Faibussowitsch /* Process Info */ 63e94e781bSJacob Faibussowitsch { 64e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 65e94e781bSJacob Faibussowitsch 66e94e781bSJacob Faibussowitsch classids[0] = PETSCSF_CLASSID; 679566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sf", 1, classids)); 6829046d53SLisandro Dalcin } 6929046d53SLisandro Dalcin /* Process summary exclusions */ 709566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 7129046d53SLisandro Dalcin if (opt) { 729566063dSJacob Faibussowitsch PetscCall(PetscStrInList("sf", logList, ',', &pkg)); 739566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID)); 7429046d53SLisandro Dalcin } 758e81d068SLisandro Dalcin /* Register package finalizer */ 769566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage)); 773ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 7895fce210SBarry Smith } 7995fce210SBarry Smith 8095fce210SBarry Smith /*@C 81cab54364SBarry Smith PetscSFFinalizePackage - Finalize `PetscSF` package, it is called from `PetscFinalize()` 8295fce210SBarry Smith 8395fce210SBarry Smith Logically Collective 8495fce210SBarry Smith 8595fce210SBarry Smith Level: developer 8695fce210SBarry Smith 87cab54364SBarry Smith .seealso: `PetscSF`, `PetscSFInitializePackage()` 8895fce210SBarry Smith @*/ 89d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSFFinalizePackage(void) 90d71ae5a4SJacob Faibussowitsch { 9195fce210SBarry Smith PetscFunctionBegin; 929566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscSFList)); 9395fce210SBarry Smith PetscSFPackageInitialized = PETSC_FALSE; 9493ef888dSBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 953ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 9695fce210SBarry Smith } 97