xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision fbf9dbe564678ed6eff1806adbc4c4f01b9743f4)
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 `PetscSF` package
24 
25    Logically Collective
26 
27    Level: developer
28 
29 .seealso: `PetscSF`, `PetscSFFinalizePackage()`
30 @*/
31 PetscErrorCode PetscSFInitializePackage(void)
32 {
33   char      logList[256];
34   PetscBool opt, pkg;
35 
36   PetscFunctionBegin;
37   if (PetscSFPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
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(PETSC_SUCCESS);
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: `PetscSF`, `PetscSFInitializePackage()`
84 @*/
85 PetscErrorCode PetscSFFinalizePackage(void)
86 {
87   PetscFunctionBegin;
88   PetscCall(PetscFunctionListDestroy(&PetscSFList));
89   PetscSFPackageInitialized = PETSC_FALSE;
90   PetscSFRegisterAllCalled  = PETSC_FALSE;
91   PetscFunctionReturn(PETSC_SUCCESS);
92 }
93