xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision 4d55d066f7a6caaeaa16698232379458a3f2f862)
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_BcastAndOpBegin;
12 PetscLogEvent PETSCSF_BcastAndOpEnd;
13 PetscLogEvent PETSCSF_ReduceBegin;
14 PetscLogEvent PETSCSF_ReduceEnd;
15 PetscLogEvent PETSCSF_FetchAndOpBegin;
16 PetscLogEvent PETSCSF_FetchAndOpEnd;
17 PetscLogEvent PETSCSF_EmbedSF;
18 PetscLogEvent PETSCSF_DistSect;
19 PetscLogEvent PETSCSF_SectSF;
20 PetscLogEvent PETSCSF_RemoteOff;
21 PetscLogEvent PETSCSF_Pack;
22 PetscLogEvent PETSCSF_Unpack;
23 
24 /*@C
25    PetscSFInitializePackage - Initialize SF package
26 
27    Logically Collective
28 
29    Level: developer
30 
31 .seealso: PetscSFFinalizePackage()
32 @*/
33 PetscErrorCode PetscSFInitializePackage(void)
34 {
35   char           logList[256];
36   PetscBool      opt,pkg;
37   PetscErrorCode ierr;
38 
39   PetscFunctionBegin;
40   if (PetscSFPackageInitialized) PetscFunctionReturn(0);
41   PetscSFPackageInitialized = PETSC_TRUE;
42   /* Register Class */
43   ierr = PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID);CHKERRQ(ierr);
44   /* Register Constructors */
45   ierr = PetscSFRegisterAll();CHKERRQ(ierr);
46   /* Register Events */
47   ierr = PetscLogEventRegister("SFSetGraph"     , PETSCSF_CLASSID, &PETSCSF_SetGraph);CHKERRQ(ierr);
48   ierr = PetscLogEventRegister("SFSetUp"        , PETSCSF_CLASSID, &PETSCSF_SetUp);CHKERRQ(ierr);
49   ierr = PetscLogEventRegister("SFBcastBegin"   , PETSCSF_CLASSID, &PETSCSF_BcastBegin);CHKERRQ(ierr);
50   ierr = PetscLogEventRegister("SFBcastEnd"     , PETSCSF_CLASSID, &PETSCSF_BcastEnd);CHKERRQ(ierr);
51   ierr = PetscLogEventRegister("SFBcastOpBegin" , PETSCSF_CLASSID, &PETSCSF_BcastAndOpBegin);CHKERRQ(ierr);
52   ierr = PetscLogEventRegister("SFBcastOpEnd"   , PETSCSF_CLASSID, &PETSCSF_BcastAndOpEnd);CHKERRQ(ierr);
53   ierr = PetscLogEventRegister("SFReduceBegin"  , PETSCSF_CLASSID, &PETSCSF_ReduceBegin);CHKERRQ(ierr);
54   ierr = PetscLogEventRegister("SFReduceEnd"    , PETSCSF_CLASSID, &PETSCSF_ReduceEnd);CHKERRQ(ierr);
55   ierr = PetscLogEventRegister("SFFetchOpBegin" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin);CHKERRQ(ierr);
56   ierr = PetscLogEventRegister("SFFetchOpEnd"   , PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd);CHKERRQ(ierr);
57   ierr = PetscLogEventRegister("SFCreateEmbed"  , PETSCSF_CLASSID, &PETSCSF_EmbedSF);CHKERRQ(ierr);
58   ierr = PetscLogEventRegister("SFDistSection"  , PETSCSF_CLASSID, &PETSCSF_DistSect);CHKERRQ(ierr);
59   ierr = PetscLogEventRegister("SFSectionSF"    , PETSCSF_CLASSID, &PETSCSF_SectSF);CHKERRQ(ierr);
60   ierr = PetscLogEventRegister("SFRemoteOff"    , PETSCSF_CLASSID, &PETSCSF_RemoteOff);CHKERRQ(ierr);
61   ierr = PetscLogEventRegister("SFPack"         , PETSCSF_CLASSID, &PETSCSF_Pack);CHKERRQ(ierr);
62   ierr = PetscLogEventRegister("SFUnpack"       , PETSCSF_CLASSID, &PETSCSF_Unpack);CHKERRQ(ierr);
63   /* Process info exclusions */
64   ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
65   if (opt) {
66     ierr = PetscStrInList("sf",logList,',',&pkg);CHKERRQ(ierr);
67     if (pkg) {ierr = PetscInfoDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr);}
68   }
69   /* Process summary exclusions */
70   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
71   if (opt) {
72     ierr = PetscStrInList("sf",logList,',',&pkg);CHKERRQ(ierr);
73     if (pkg) {ierr = PetscLogEventExcludeClass(PETSCSF_CLASSID);CHKERRQ(ierr);}
74   }
75   /* Register package finalizer */
76   ierr = PetscRegisterFinalize(PetscSFFinalizePackage);CHKERRQ(ierr);
77   PetscFunctionReturn(0);
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: PetscSFInitializePackage()
88 @*/
89 PetscErrorCode PetscSFFinalizePackage(void)
90 {
91   PetscErrorCode ierr;
92 
93   PetscFunctionBegin;
94   ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr);
95   PetscSFPackageInitialized = PETSC_FALSE;
96   PetscSFRegisterAllCalled  = PETSC_FALSE;
97   PetscFunctionReturn(0);
98 }
99