xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision 6a5217c03994f2d95bb2e6dbd8bed42381aeb015)
1 #include <petsc/private/sfimpl.h>
2 
3 static PetscBool PetscSFPackageInitialized = PETSC_FALSE;
4 
5 PetscClassId  PETSCSF_CLASSID;
6 
7 PetscLogEvent PETSCSF_SetGraph;
8 PetscLogEvent PETSCSF_SetUp;
9 PetscLogEvent PETSCSF_BcastBegin;
10 PetscLogEvent PETSCSF_BcastEnd;
11 PetscLogEvent PETSCSF_ReduceBegin;
12 PetscLogEvent PETSCSF_ReduceEnd;
13 PetscLogEvent PETSCSF_FetchAndOpBegin;
14 PetscLogEvent PETSCSF_FetchAndOpEnd;
15 PetscLogEvent PETSCSF_EmbedSF;
16 PetscLogEvent PETSCSF_DistSect;
17 PetscLogEvent PETSCSF_SectSF;
18 PetscLogEvent PETSCSF_RemoteOff;
19 PetscLogEvent PETSCSF_Pack;
20 PetscLogEvent PETSCSF_Unpack;
21 
22 /*@C
23    PetscSFInitializePackage - Initialize SF package
24 
25    Logically Collective
26 
27    Level: developer
28 
29 .seealso: PetscSFFinalizePackage()
30 @*/
31 PetscErrorCode PetscSFInitializePackage(void)
32 {
33   char           logList[256];
34   PetscBool      opt,pkg;
35 
36   PetscFunctionBegin;
37   if (PetscSFPackageInitialized) PetscFunctionReturn(0);
38   PetscSFPackageInitialized = PETSC_TRUE;
39   /* Register Class */
40   PetscCall(PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID));
41   /* Register Constructors */
42   PetscCall(PetscSFRegisterAll());
43   /* Register Events */
44   PetscCall(PetscLogEventRegister("SFSetGraph"     , PETSCSF_CLASSID, &PETSCSF_SetGraph));
45   PetscCall(PetscLogEventRegister("SFSetUp"        , PETSCSF_CLASSID, &PETSCSF_SetUp));
46   PetscCall(PetscLogEventRegister("SFBcastBegin"   , PETSCSF_CLASSID, &PETSCSF_BcastBegin));
47   PetscCall(PetscLogEventRegister("SFBcastEnd"     , PETSCSF_CLASSID, &PETSCSF_BcastEnd));
48   PetscCall(PetscLogEventRegister("SFReduceBegin"  , PETSCSF_CLASSID, &PETSCSF_ReduceBegin));
49   PetscCall(PetscLogEventRegister("SFReduceEnd"    , PETSCSF_CLASSID, &PETSCSF_ReduceEnd));
50   PetscCall(PetscLogEventRegister("SFFetchOpBegin" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin));
51   PetscCall(PetscLogEventRegister("SFFetchOpEnd"   , PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd));
52   PetscCall(PetscLogEventRegister("SFCreateEmbed"  , PETSCSF_CLASSID, &PETSCSF_EmbedSF));
53   PetscCall(PetscLogEventRegister("SFDistSection"  , PETSCSF_CLASSID, &PETSCSF_DistSect));
54   PetscCall(PetscLogEventRegister("SFSectionSF"    , PETSCSF_CLASSID, &PETSCSF_SectSF));
55   PetscCall(PetscLogEventRegister("SFRemoteOff"    , PETSCSF_CLASSID, &PETSCSF_RemoteOff));
56   PetscCall(PetscLogEventRegister("SFPack"         , PETSCSF_CLASSID, &PETSCSF_Pack));
57   PetscCall(PetscLogEventRegister("SFUnpack"       , PETSCSF_CLASSID, &PETSCSF_Unpack));
58   /* Process Info */
59   {
60     PetscClassId  classids[1];
61 
62     classids[0] = PETSCSF_CLASSID;
63     PetscCall(PetscInfoProcessClass("sf", 1, classids));
64   }
65   /* Process summary exclusions */
66   PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
67   if (opt) {
68     PetscCall(PetscStrInList("sf",logList,',',&pkg));
69     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID));
70   }
71   /* Register package finalizer */
72   PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage));
73   PetscFunctionReturn(0);
74 }
75 
76 /*@C
77    PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize()
78 
79    Logically Collective
80 
81    Level: developer
82 
83 .seealso: PetscSFInitializePackage()
84 @*/
85 PetscErrorCode PetscSFFinalizePackage(void)
86 {
87   PetscFunctionBegin;
88   PetscCall(PetscFunctionListDestroy(&PetscSFList));
89   PetscSFPackageInitialized = PETSC_FALSE;
90   PetscSFRegisterAllCalled  = PETSC_FALSE;
91   PetscFunctionReturn(0);
92 }
93