Actual source code: dlregissf.c

  1: #include <petsc/private/sfimpl.h>

  3: static PetscBool PetscSFPackageInitialized = PETSC_FALSE;

  5: PetscClassId PETSCSF_CLASSID;

  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;

 22: /*@C
 23:   PetscSFInitializePackage - Initialize `PetscSF` package

 25:   Logically Collective

 27:   Level: developer

 29: .seealso: `PetscSF`, `PetscSFFinalizePackage()`
 30: @*/
 31: PetscErrorCode PetscSFInitializePackage(void)
 32: {
 33:   char      logList[256];
 34:   PetscBool opt, pkg;

 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));

 62:   /* Process Info */
 63:   {
 64:     PetscClassId classids[1];

 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: }

 80: /*@C
 81:   PetscSFFinalizePackage - Finalize `PetscSF` package, it is called from `PetscFinalize()`

 83:   Logically Collective

 85:   Level: developer

 87: .seealso: `PetscSF`, `PetscSFInitializePackage()`
 88: @*/
 89: PetscErrorCode PetscSFFinalizePackage(void)
 90: {
 91:   PetscFunctionBegin;
 92:   PetscCall(PetscFunctionListDestroy(&PetscSFList));
 93:   PetscSFPackageInitialized = PETSC_FALSE;
 94:   PetscSFRegisterAllCalled  = PETSC_FALSE;
 95:   PetscFunctionReturn(PETSC_SUCCESS);
 96: }