1d6cc7855SJacob Faibussowitsch #include <petsc/private/randomimpl.h>
25c6c1daeSBarry Smith
35c6c1daeSBarry Smith static PetscBool PetscRandomPackageInitialized = PETSC_FALSE;
466976f2fSJacob Faibussowitsch
55c6c1daeSBarry Smith /*@C
6*c31d2375SBarry Smith PetscRandomFinalizePackage - This function frees everything in the `PetscRandom` package. It is
7811af0c4SBarry Smith called from `PetscFinalize()`.
85c6c1daeSBarry Smith
95c6c1daeSBarry Smith Level: developer
105c6c1daeSBarry Smith
11db781477SPatrick Sanan .seealso: `PetscFinalize()`
125c6c1daeSBarry Smith @*/
PetscRandomFinalizePackage(void)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;
193ba16761SJacob 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 @*/
PetscRandomInitializePackage(void)31d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscRandomInitializePackage(void)
32d71ae5a4SJacob Faibussowitsch {
338e81d068SLisandro Dalcin char logList[256];
348e81d068SLisandro Dalcin PetscBool opt, pkg;
355c6c1daeSBarry Smith
365c6c1daeSBarry Smith PetscFunctionBegin;
373ba16761SJacob 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));
583ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
595c6c1daeSBarry Smith }
60