xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision c314a4813f61fcaf170eecd66543a66e2b5455f4)
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