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