xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
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   char      logList[256];
33   PetscBool opt, pkg;
34 
35   PetscFunctionBegin;
36   if (PetscSFPackageInitialized) PetscFunctionReturn(0);
37   PetscSFPackageInitialized = PETSC_TRUE;
38   /* Register Class */
39   PetscCall(PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID));
40   /* Register Constructors */
41   PetscCall(PetscSFRegisterAll());
42   /* Register Events */
43   PetscCall(PetscLogEventRegister("SFSetGraph", PETSCSF_CLASSID, &PETSCSF_SetGraph));
44   PetscCall(PetscLogEventRegister("SFSetUp", PETSCSF_CLASSID, &PETSCSF_SetUp));
45   PetscCall(PetscLogEventRegister("SFBcastBegin", PETSCSF_CLASSID, &PETSCSF_BcastBegin));
46   PetscCall(PetscLogEventRegister("SFBcastEnd", PETSCSF_CLASSID, &PETSCSF_BcastEnd));
47   PetscCall(PetscLogEventRegister("SFReduceBegin", PETSCSF_CLASSID, &PETSCSF_ReduceBegin));
48   PetscCall(PetscLogEventRegister("SFReduceEnd", PETSCSF_CLASSID, &PETSCSF_ReduceEnd));
49   PetscCall(PetscLogEventRegister("SFFetchOpBegin", PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin));
50   PetscCall(PetscLogEventRegister("SFFetchOpEnd", PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd));
51   PetscCall(PetscLogEventRegister("SFCreateEmbed", PETSCSF_CLASSID, &PETSCSF_EmbedSF));
52   PetscCall(PetscLogEventRegister("SFDistSection", PETSCSF_CLASSID, &PETSCSF_DistSect));
53   PetscCall(PetscLogEventRegister("SFSectionSF", PETSCSF_CLASSID, &PETSCSF_SectSF));
54   PetscCall(PetscLogEventRegister("SFRemoteOff", PETSCSF_CLASSID, &PETSCSF_RemoteOff));
55   PetscCall(PetscLogEventRegister("SFPack", PETSCSF_CLASSID, &PETSCSF_Pack));
56   PetscCall(PetscLogEventRegister("SFUnpack", PETSCSF_CLASSID, &PETSCSF_Unpack));
57   /* Process Info */
58   {
59     PetscClassId classids[1];
60 
61     classids[0] = PETSCSF_CLASSID;
62     PetscCall(PetscInfoProcessClass("sf", 1, classids));
63   }
64   /* Process summary exclusions */
65   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
66   if (opt) {
67     PetscCall(PetscStrInList("sf", logList, ',', &pkg));
68     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID));
69   }
70   /* Register package finalizer */
71   PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage));
72   PetscFunctionReturn(0);
73 }
74 
75 /*@C
76    PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize()
77 
78    Logically Collective
79 
80    Level: developer
81 
82 .seealso: `PetscSFInitializePackage()`
83 @*/
84 PetscErrorCode PetscSFFinalizePackage(void) {
85   PetscFunctionBegin;
86   PetscCall(PetscFunctionListDestroy(&PetscSFList));
87   PetscSFPackageInitialized = PETSC_FALSE;
88   PetscSFRegisterAllCalled  = PETSC_FALSE;
89   PetscFunctionReturn(0);
90 }
91