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 @*/
PetscSFInitializePackage(void)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 @*/
PetscSFFinalizePackage(void)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