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 @*/
PetscSFInitializePackage(void)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 /* Flag non-collective events */
59 PetscCall(PetscLogEventSetCollective(PETSCSF_Pack, PETSC_FALSE));
60 PetscCall(PetscLogEventSetCollective(PETSCSF_Unpack, PETSC_FALSE));
61
62 /* Process Info */
63 {
64 PetscClassId classids[1];
65
66 classids[0] = PETSCSF_CLASSID;
67 PetscCall(PetscInfoProcessClass("sf", 1, classids));
68 }
69 /* Process summary exclusions */
70 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
71 if (opt) {
72 PetscCall(PetscStrInList("sf", logList, ',', &pkg));
73 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCSF_CLASSID));
74 }
75 /* Register package finalizer */
76 PetscCall(PetscRegisterFinalize(PetscSFFinalizePackage));
77 PetscFunctionReturn(PETSC_SUCCESS);
78 }
79
80 /*@C
81 PetscSFFinalizePackage - Finalize `PetscSF` package, it is called from `PetscFinalize()`
82
83 Logically Collective
84
85 Level: developer
86
87 .seealso: `PetscSF`, `PetscSFInitializePackage()`
88 @*/
PetscSFFinalizePackage(void)89 PetscErrorCode PetscSFFinalizePackage(void)
90 {
91 PetscFunctionBegin;
92 PetscCall(PetscFunctionListDestroy(&PetscSFList));
93 PetscSFPackageInitialized = PETSC_FALSE;
94 PetscSFRegisterAllCalled = PETSC_FALSE;
95 PetscFunctionReturn(PETSC_SUCCESS);
96 }
97