1af0996ceSBarry Smith #include <petsc/private/sfimpl.h> 295fce210SBarry Smith 395fce210SBarry Smith static PetscBool PetscSFPackageInitialized = PETSC_FALSE; 495fce210SBarry Smith 5*29046d53SLisandro Dalcin PetscClassId PETSCSF_CLASSID; 6*29046d53SLisandro Dalcin 7*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_SetGraph; 8*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_SetUp; 9*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_BcastBegin; 10*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_BcastEnd; 11*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_ReduceBegin; 12*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_ReduceEnd; 13*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_FetchAndOpBegin; 14*29046d53SLisandro Dalcin PetscLogEvent PETSCSF_FetchAndOpEnd; 1595fce210SBarry Smith 1695fce210SBarry Smith /*@C 1795fce210SBarry Smith PetscSFInitializePackage - Initialize SF package 1895fce210SBarry Smith 1995fce210SBarry Smith Logically Collective 2095fce210SBarry Smith 2195fce210SBarry Smith Level: developer 2295fce210SBarry Smith 2395fce210SBarry Smith .seealso: PetscSFFinalizePackage() 2495fce210SBarry Smith @*/ 25607a6623SBarry Smith PetscErrorCode PetscSFInitializePackage(void) 2695fce210SBarry Smith { 27*29046d53SLisandro Dalcin char logList[256]; 28*29046d53SLisandro Dalcin char *className; 29*29046d53SLisandro Dalcin PetscBool opt; 3095fce210SBarry Smith PetscErrorCode ierr; 3195fce210SBarry Smith 3295fce210SBarry Smith PetscFunctionBegin; 3395fce210SBarry Smith if (PetscSFPackageInitialized) PetscFunctionReturn(0); 3495fce210SBarry Smith PetscSFPackageInitialized = PETSC_TRUE; 3595fce210SBarry Smith 363c2f6d5dSBarry Smith ierr = PetscClassIdRegister("Star Forest Graph", &PETSCSF_CLASSID);CHKERRQ(ierr); 37607a6623SBarry Smith ierr = PetscSFRegisterAll();CHKERRQ(ierr); 38*29046d53SLisandro Dalcin /* Register all events */ 39acd23793SJed Brown ierr = PetscLogEventRegister("SFSetGraph" , PETSCSF_CLASSID, &PETSCSF_SetGraph);CHKERRQ(ierr); 40*29046d53SLisandro Dalcin ierr = PetscLogEventRegister("SFSetUp" , PETSCSF_CLASSID, &PETSCSF_SetUp);CHKERRQ(ierr); 41acd23793SJed Brown ierr = PetscLogEventRegister("SFBcastBegin" , PETSCSF_CLASSID, &PETSCSF_BcastBegin);CHKERRQ(ierr); 42acd23793SJed Brown ierr = PetscLogEventRegister("SFBcastEnd" , PETSCSF_CLASSID, &PETSCSF_BcastEnd);CHKERRQ(ierr); 43acd23793SJed Brown ierr = PetscLogEventRegister("SFReduceBegin" , PETSCSF_CLASSID, &PETSCSF_ReduceBegin);CHKERRQ(ierr); 44acd23793SJed Brown ierr = PetscLogEventRegister("SFReduceEnd" , PETSCSF_CLASSID, &PETSCSF_ReduceEnd);CHKERRQ(ierr); 45acd23793SJed Brown ierr = PetscLogEventRegister("SFFetchOpBegin" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpBegin);CHKERRQ(ierr); 46acd23793SJed Brown ierr = PetscLogEventRegister("SFFetchOpEnd" , PETSCSF_CLASSID, &PETSCSF_FetchAndOpEnd);CHKERRQ(ierr); 47*29046d53SLisandro Dalcin /* Process info exclusions */ 48*29046d53SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, sizeof(logList), &opt);CHKERRQ(ierr); 49*29046d53SLisandro Dalcin if (opt) { 50*29046d53SLisandro Dalcin ierr = PetscStrstr(logList, "sf", &className);CHKERRQ(ierr); 51*29046d53SLisandro Dalcin if (className) { 52*29046d53SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr); 53*29046d53SLisandro Dalcin } 54*29046d53SLisandro Dalcin } 55*29046d53SLisandro Dalcin /* Process summary exclusions */ 56*29046d53SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, sizeof(logList), &opt);CHKERRQ(ierr); 57*29046d53SLisandro Dalcin if (opt) { 58*29046d53SLisandro Dalcin ierr = PetscStrstr(logList, "sf", &className);CHKERRQ(ierr); 59*29046d53SLisandro Dalcin if (className) { 60*29046d53SLisandro Dalcin ierr = PetscLogEventDeactivateClass(PETSCSF_CLASSID);CHKERRQ(ierr); 61*29046d53SLisandro Dalcin } 62*29046d53SLisandro Dalcin } 6395fce210SBarry Smith ierr = PetscRegisterFinalize(PetscSFFinalizePackage);CHKERRQ(ierr); 6495fce210SBarry Smith PetscFunctionReturn(0); 6595fce210SBarry Smith } 6695fce210SBarry Smith 6795fce210SBarry Smith /*@C 6895fce210SBarry Smith PetscSFFinalizePackage - Finalize PetscSF package, it is called from PetscFinalize() 6995fce210SBarry Smith 7095fce210SBarry Smith Logically Collective 7195fce210SBarry Smith 7295fce210SBarry Smith Level: developer 7395fce210SBarry Smith 7495fce210SBarry Smith .seealso: PetscSFInitializePackage() 7595fce210SBarry Smith @*/ 7695fce210SBarry Smith PetscErrorCode PetscSFFinalizePackage(void) 7795fce210SBarry Smith { 7837e93019SBarry Smith PetscErrorCode ierr; 7995fce210SBarry Smith 8095fce210SBarry Smith PetscFunctionBegin; 8137e93019SBarry Smith ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr); 8295fce210SBarry Smith PetscSFPackageInitialized = PETSC_FALSE; 8393ef888dSBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 8495fce210SBarry Smith PetscFunctionReturn(0); 8595fce210SBarry Smith } 86