15c6c1daeSBarry Smith 2d6cc7855SJacob Faibussowitsch #include <petsc/private/randomimpl.h> 35c6c1daeSBarry Smith 45c6c1daeSBarry Smith static PetscBool PetscRandomPackageInitialized = PETSC_FALSE; 55c6c1daeSBarry Smith /*@C 6811af0c4SBarry Smith PetscRandomFinalizePackage - This function destroys everything in the Petsc interface to the `PetscRandom` package. It is 7811af0c4SBarry Smith called from `PetscFinalize()`. 85c6c1daeSBarry Smith 95c6c1daeSBarry Smith Level: developer 105c6c1daeSBarry Smith 11db781477SPatrick Sanan .seealso: `PetscFinalize()` 125c6c1daeSBarry Smith @*/ 13d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscRandomFinalizePackage(void) 14d71ae5a4SJacob Faibussowitsch { 155c6c1daeSBarry Smith PetscFunctionBegin; 169566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscRandomList)); 175c6c1daeSBarry Smith PetscRandomPackageInitialized = PETSC_FALSE; 185c6c1daeSBarry Smith PetscRandomRegisterAllCalled = PETSC_FALSE; 19*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 205c6c1daeSBarry Smith } 215c6c1daeSBarry Smith 225c6c1daeSBarry Smith /*@C 23811af0c4SBarry Smith PetscRandomInitializePackage - This function initializes everything in the `PetscRandom` package. It is called 24811af0c4SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the first call to `PetscRandomCreate()` 258a690491SBarry Smith when using shared or static libraries. 265c6c1daeSBarry Smith 275c6c1daeSBarry Smith Level: developer 285c6c1daeSBarry Smith 29db781477SPatrick Sanan .seealso: `PetscInitialize()` 305c6c1daeSBarry Smith @*/ 31d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscRandomInitializePackage(void) 32d71ae5a4SJacob Faibussowitsch { 338e81d068SLisandro Dalcin char logList[256]; 348e81d068SLisandro Dalcin PetscBool opt, pkg; 355c6c1daeSBarry Smith 365c6c1daeSBarry Smith PetscFunctionBegin; 37*3ba16761SJacob Faibussowitsch if (PetscRandomPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 385c6c1daeSBarry Smith PetscRandomPackageInitialized = PETSC_TRUE; 395c6c1daeSBarry Smith /* Register Class */ 409566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("PetscRandom", &PETSC_RANDOM_CLASSID)); 418e81d068SLisandro Dalcin /* Register Constructors */ 429566063dSJacob Faibussowitsch PetscCall(PetscRandomRegisterAll()); 43e94e781bSJacob Faibussowitsch /* Process Info */ 44e94e781bSJacob Faibussowitsch { 45e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 46e94e781bSJacob Faibussowitsch 47e94e781bSJacob Faibussowitsch classids[0] = PETSC_RANDOM_CLASSID; 489566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("random", 1, classids)); 498e81d068SLisandro Dalcin } 508e81d068SLisandro Dalcin /* Process summary exclusions */ 519566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 528e81d068SLisandro Dalcin if (opt) { 539566063dSJacob Faibussowitsch PetscCall(PetscStrInList("random", logList, ',', &pkg)); 549566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_RANDOM_CLASSID)); 558e81d068SLisandro Dalcin } 568e81d068SLisandro Dalcin /* Register package finalizer */ 579566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscRandomFinalizePackage)); 58*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 595c6c1daeSBarry Smith } 60