15c6c1daeSBarry Smith 2d6cc7855SJacob Faibussowitsch #include <petsc/private/randomimpl.h> 35c6c1daeSBarry Smith 45c6c1daeSBarry Smith static PetscBool PetscRandomPackageInitialized = PETSC_FALSE; 5*66976f2fSJacob Faibussowitsch 65c6c1daeSBarry Smith /*@C 7811af0c4SBarry Smith PetscRandomFinalizePackage - This function destroys everything in the Petsc interface to the `PetscRandom` package. It is 8811af0c4SBarry Smith called from `PetscFinalize()`. 95c6c1daeSBarry Smith 105c6c1daeSBarry Smith Level: developer 115c6c1daeSBarry Smith 12db781477SPatrick Sanan .seealso: `PetscFinalize()` 135c6c1daeSBarry Smith @*/ 14d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscRandomFinalizePackage(void) 15d71ae5a4SJacob Faibussowitsch { 165c6c1daeSBarry Smith PetscFunctionBegin; 179566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscRandomList)); 185c6c1daeSBarry Smith PetscRandomPackageInitialized = PETSC_FALSE; 195c6c1daeSBarry Smith PetscRandomRegisterAllCalled = PETSC_FALSE; 203ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 215c6c1daeSBarry Smith } 225c6c1daeSBarry Smith 235c6c1daeSBarry Smith /*@C 24811af0c4SBarry Smith PetscRandomInitializePackage - This function initializes everything in the `PetscRandom` package. It is called 25811af0c4SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the first call to `PetscRandomCreate()` 268a690491SBarry Smith when using shared or static libraries. 275c6c1daeSBarry Smith 285c6c1daeSBarry Smith Level: developer 295c6c1daeSBarry Smith 30db781477SPatrick Sanan .seealso: `PetscInitialize()` 315c6c1daeSBarry Smith @*/ 32d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscRandomInitializePackage(void) 33d71ae5a4SJacob Faibussowitsch { 348e81d068SLisandro Dalcin char logList[256]; 358e81d068SLisandro Dalcin PetscBool opt, pkg; 365c6c1daeSBarry Smith 375c6c1daeSBarry Smith PetscFunctionBegin; 383ba16761SJacob Faibussowitsch if (PetscRandomPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 395c6c1daeSBarry Smith PetscRandomPackageInitialized = PETSC_TRUE; 405c6c1daeSBarry Smith /* Register Class */ 419566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("PetscRandom", &PETSC_RANDOM_CLASSID)); 428e81d068SLisandro Dalcin /* Register Constructors */ 439566063dSJacob Faibussowitsch PetscCall(PetscRandomRegisterAll()); 44e94e781bSJacob Faibussowitsch /* Process Info */ 45e94e781bSJacob Faibussowitsch { 46e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 47e94e781bSJacob Faibussowitsch 48e94e781bSJacob Faibussowitsch classids[0] = PETSC_RANDOM_CLASSID; 499566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("random", 1, classids)); 508e81d068SLisandro Dalcin } 518e81d068SLisandro Dalcin /* Process summary exclusions */ 529566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 538e81d068SLisandro Dalcin if (opt) { 549566063dSJacob Faibussowitsch PetscCall(PetscStrInList("random", logList, ',', &pkg)); 559566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_RANDOM_CLASSID)); 568e81d068SLisandro Dalcin } 578e81d068SLisandro Dalcin /* Register package finalizer */ 589566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscRandomFinalizePackage)); 593ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 605c6c1daeSBarry Smith } 61