xref: /petsc/src/sys/classes/random/interface/dlregisrand.c (revision 811af0c4b09a35de4306c442f88bd09fdc09897d)
15c6c1daeSBarry Smith 
2d6cc7855SJacob Faibussowitsch #include <petsc/private/randomimpl.h>
35c6c1daeSBarry Smith 
45c6c1daeSBarry Smith static PetscBool PetscRandomPackageInitialized = PETSC_FALSE;
55c6c1daeSBarry Smith /*@C
6*811af0c4SBarry Smith   PetscRandomFinalizePackage - This function destroys everything in the Petsc interface to the `PetscRandom` package. It is
7*811af0c4SBarry Smith   called from `PetscFinalize()`.
85c6c1daeSBarry Smith 
95c6c1daeSBarry Smith   Level: developer
105c6c1daeSBarry Smith 
11db781477SPatrick Sanan .seealso: `PetscFinalize()`
125c6c1daeSBarry Smith @*/
139371c9d4SSatish Balay PetscErrorCode   PetscRandomFinalizePackage(void) {
145c6c1daeSBarry Smith     PetscFunctionBegin;
159566063dSJacob Faibussowitsch     PetscCall(PetscFunctionListDestroy(&PetscRandomList));
165c6c1daeSBarry Smith     PetscRandomPackageInitialized = PETSC_FALSE;
175c6c1daeSBarry Smith     PetscRandomRegisterAllCalled  = PETSC_FALSE;
185c6c1daeSBarry Smith     PetscFunctionReturn(0);
195c6c1daeSBarry Smith }
205c6c1daeSBarry Smith 
215c6c1daeSBarry Smith /*@C
22*811af0c4SBarry Smith   PetscRandomInitializePackage - This function initializes everything in the `PetscRandom` package. It is called
23*811af0c4SBarry Smith   from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the first call to `PetscRandomCreate()`
248a690491SBarry Smith   when using shared or static libraries.
255c6c1daeSBarry Smith 
265c6c1daeSBarry Smith   Level: developer
275c6c1daeSBarry Smith 
28db781477SPatrick Sanan .seealso: `PetscInitialize()`
295c6c1daeSBarry Smith @*/
309371c9d4SSatish Balay PetscErrorCode PetscRandomInitializePackage(void) {
318e81d068SLisandro Dalcin   char      logList[256];
328e81d068SLisandro Dalcin   PetscBool opt, pkg;
335c6c1daeSBarry Smith 
345c6c1daeSBarry Smith   PetscFunctionBegin;
355c6c1daeSBarry Smith   if (PetscRandomPackageInitialized) PetscFunctionReturn(0);
365c6c1daeSBarry Smith   PetscRandomPackageInitialized = PETSC_TRUE;
375c6c1daeSBarry Smith   /* Register Class */
389566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("PetscRandom", &PETSC_RANDOM_CLASSID));
398e81d068SLisandro Dalcin   /* Register Constructors */
409566063dSJacob Faibussowitsch   PetscCall(PetscRandomRegisterAll());
41e94e781bSJacob Faibussowitsch   /* Process Info */
42e94e781bSJacob Faibussowitsch   {
43e94e781bSJacob Faibussowitsch     PetscClassId classids[1];
44e94e781bSJacob Faibussowitsch 
45e94e781bSJacob Faibussowitsch     classids[0] = PETSC_RANDOM_CLASSID;
469566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("random", 1, classids));
478e81d068SLisandro Dalcin   }
488e81d068SLisandro Dalcin   /* Process summary exclusions */
499566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
508e81d068SLisandro Dalcin   if (opt) {
519566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("random", logList, ',', &pkg));
529566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_RANDOM_CLASSID));
538e81d068SLisandro Dalcin   }
548e81d068SLisandro Dalcin   /* Register package finalizer */
559566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(PetscRandomFinalizePackage));
565c6c1daeSBarry Smith   PetscFunctionReturn(0);
575c6c1daeSBarry Smith }
58