xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision 5b6bfdb9644f185dbf5e5a09b808ec241507e1e7)
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 
16 /*@C
17    PetscSFInitializePackage - Initialize SF package
18 
19    Logically Collective
20 
21    Level: developer
22 
23 .seealso: PetscSFFinalizePackage()
24 @*/
25 PetscErrorCode PetscSFInitializePackage(void)
26 {
27   char           logList[256];
28   PetscBool      opt,pkg;
29   PetscErrorCode ierr;
30 
31   PetscFunctionBegin;
32   if (PetscSFPackageInitialized) PetscFunctionReturn(0);
33   PetscSFPackageInitialized = PETSC_TRUE;
34   /* Register Class */
35   ierr = PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID);CHKERRQ(ierr);
36   /* Register Constructors */
37   ierr = PetscSFRegisterAll();CHKERRQ(ierr);
38   /* Register Events */
39   ierr = PetscLogEventRegister("SFSetGraph"     , PETSCSF_CLASSID, &PETSCSF_SetGraph);CHKERRQ(ierr);
40   ierr = PetscLogEventRegister("SFSetUp"        , PETSCSF_CLASSID, &PETSCSF_SetUp);CHKERRQ(ierr);
41   ierr = PetscLogEventRegister("SFBcastBegin"   , PETSCSF_CLASSID, &PETSCSF_BcastBegin);CHKERRQ(ierr);
42   ierr = PetscLogEventRegister("SFBcastEnd"     , PETSCSF_CLASSID, &PETSCSF_BcastEnd);CHKERRQ(ierr);
43   ierr = PetscLogEventRegister("SFReduceBegin"  , PETSCSF_CLASSID, &PETSCSF_ReduceBegin);CHKERRQ(ierr);
44   ierr = PetscLogEventRegister("SFReduceEnd"    , PETSCSF_CLASSID, &PETSCSF_ReduceEnd);CHKERRQ(ierr);
45   ierr = PetscLogEventRegister("SFFetchOpBegin" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin);CHKERRQ(ierr);
46   ierr = PetscLogEventRegister("SFFetchOpEnd"   , PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd);CHKERRQ(ierr);
47   /* Process info exclusions */
48   ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
49   if (opt) {
50     ierr = PetscStrInList("sf",logList,',',&pkg);CHKERRQ(ierr);
51     if (pkg) {ierr = PetscInfoDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr);}
52   }
53   /* Process summary exclusions */
54   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
55   if (opt) {
56     ierr = PetscStrInList("sf",logList,',',&pkg);CHKERRQ(ierr);
57     if (pkg) {ierr = PetscLogEventDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr);}
58   }
59   /* Register package finalizer */
60   ierr = PetscRegisterFinalize(PetscSFFinalizePackage);CHKERRQ(ierr);
61   PetscFunctionReturn(0);
62 }
63 
64 /*@C
65    PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize()
66 
67    Logically Collective
68 
69    Level: developer
70 
71 .seealso: PetscSFInitializePackage()
72 @*/
73 PetscErrorCode PetscSFFinalizePackage(void)
74 {
75   PetscErrorCode ierr;
76 
77   PetscFunctionBegin;
78   ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr);
79   PetscSFPackageInitialized = PETSC_FALSE;
80   PetscSFRegisterAllCalled  = PETSC_FALSE;
81   PetscFunctionReturn(0);
82 }
83