xref: /petsc/src/vec/is/sf/interface/dlregissf.c (revision 9b2db2227e056d74e10acbb4c7c75cbd904ecd7e)
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   char           *className;
29   PetscBool      opt;
30   PetscErrorCode ierr;
31 
32   PetscFunctionBegin;
33   if (PetscSFPackageInitialized) PetscFunctionReturn(0);
34   PetscSFPackageInitialized = PETSC_TRUE;
35 
36   ierr = PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID);CHKERRQ(ierr);
37   ierr = PetscSFRegisterAll();CHKERRQ(ierr);
38   /* Register all 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 = PetscStrstr(logList, "sf", &className);CHKERRQ(ierr);
51     if (className) {
52       ierr = PetscInfoDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr);
53     }
54   }
55   /* Process summary exclusions */
56   ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, sizeof(logList), &opt);CHKERRQ(ierr);
57   if (opt) {
58     ierr = PetscStrstr(logList, "sf", &className);CHKERRQ(ierr);
59     if (className) {
60       ierr = PetscLogEventDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr);
61     }
62   }
63   ierr = PetscRegisterFinalize(PetscSFFinalizePackage);CHKERRQ(ierr);
64   PetscFunctionReturn(0);
65 }
66 
67 /*@C
68    PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize()
69 
70    Logically Collective
71 
72    Level: developer
73 
74 .seealso: PetscSFInitializePackage()
75 @*/
76 PetscErrorCode PetscSFFinalizePackage(void)
77 {
78   PetscErrorCode ierr;
79 
80   PetscFunctionBegin;
81   ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr);
82   PetscSFPackageInitialized = PETSC_FALSE;
83   PetscSFRegisterAllCalled  = PETSC_FALSE;
84   PetscFunctionReturn(0);
85 }
86