1 #include <petsc/private/randomimpl.h>
2
3 static PetscBool PetscRandomPackageInitialized = PETSC_FALSE;
4
5 /*@C
6 PetscRandomFinalizePackage - This function frees everything in the `PetscRandom` package. It is
7 called from `PetscFinalize()`.
8
9 Level: developer
10
11 .seealso: `PetscFinalize()`
12 @*/
PetscRandomFinalizePackage(void)13 PetscErrorCode PetscRandomFinalizePackage(void)
14 {
15 PetscFunctionBegin;
16 PetscCall(PetscFunctionListDestroy(&PetscRandomList));
17 PetscRandomPackageInitialized = PETSC_FALSE;
18 PetscRandomRegisterAllCalled = PETSC_FALSE;
19 PetscFunctionReturn(PETSC_SUCCESS);
20 }
21
22 /*@C
23 PetscRandomInitializePackage - This function initializes everything in the `PetscRandom` package. It is called
24 from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the first call to `PetscRandomCreate()`
25 when using shared or static libraries.
26
27 Level: developer
28
29 .seealso: `PetscInitialize()`
30 @*/
PetscRandomInitializePackage(void)31 PetscErrorCode PetscRandomInitializePackage(void)
32 {
33 char logList[256];
34 PetscBool opt, pkg;
35
36 PetscFunctionBegin;
37 if (PetscRandomPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
38 PetscRandomPackageInitialized = PETSC_TRUE;
39 /* Register Class */
40 PetscCall(PetscClassIdRegister("PetscRandom", &PETSC_RANDOM_CLASSID));
41 /* Register Constructors */
42 PetscCall(PetscRandomRegisterAll());
43 /* Process Info */
44 {
45 PetscClassId classids[1];
46
47 classids[0] = PETSC_RANDOM_CLASSID;
48 PetscCall(PetscInfoProcessClass("random", 1, classids));
49 }
50 /* Process summary exclusions */
51 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
52 if (opt) {
53 PetscCall(PetscStrInList("random", logList, ',', &pkg));
54 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_RANDOM_CLASSID));
55 }
56 /* Register package finalizer */
57 PetscCall(PetscRegisterFinalize(PetscRandomFinalizePackage));
58 PetscFunctionReturn(PETSC_SUCCESS);
59 }
60