Actual source code: dlregisrand.c

      1: #include <petsc/private/randomimpl.h>

      3: static PetscBool PetscRandomPackageInitialized = PETSC_FALSE;

      5: /*@C
      6:   PetscRandomFinalizePackage - This function frees everything in the `PetscRandom` package. It is
      7:   called from `PetscFinalize()`.

      9:   Level: developer

     11: .seealso: `PetscFinalize()`
     12: @*/
     13: PetscErrorCode PetscRandomFinalizePackage(void)
     14: {
     15:   PetscFunctionBegin;
     16:   PetscCall(PetscFunctionListDestroy(&PetscRandomList));
     17:   PetscRandomPackageInitialized = PETSC_FALSE;
     18:   PetscRandomRegisterAllCalled  = PETSC_FALSE;
     19:   PetscFunctionReturn(PETSC_SUCCESS);
     20: }

     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.

     27:   Level: developer

     29: .seealso: `PetscInitialize()`
     30: @*/
     31: PetscErrorCode PetscRandomInitializePackage(void)
     32: {
     33:   char      logList[256];
     34:   PetscBool opt, pkg;

     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];

     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: }