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