xref: /petsc/src/sys/classes/random/interface/dlregisrand.c (revision 66976f2f44dcc61d86a452a70219fb23b45d00f0)
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