xref: /petsc/src/sys/classes/random/interface/dlregisrand.c (revision 9566063d113dddea24716c546802770db7481bc0)
15c6c1daeSBarry Smith 
2d6cc7855SJacob Faibussowitsch #include <petsc/private/randomimpl.h>
35c6c1daeSBarry Smith 
45c6c1daeSBarry Smith static PetscBool PetscRandomPackageInitialized = PETSC_FALSE;
55c6c1daeSBarry Smith /*@C
65c6c1daeSBarry Smith   PetscRandomFinalizePackage - This function destroys everything in the Petsc interface to the Random package. It is
75c6c1daeSBarry Smith   called from PetscFinalize().
85c6c1daeSBarry Smith 
95c6c1daeSBarry Smith   Level: developer
105c6c1daeSBarry Smith 
115c6c1daeSBarry Smith .seealso: PetscFinalize()
125c6c1daeSBarry Smith @*/
135c6c1daeSBarry Smith PetscErrorCode  PetscRandomFinalizePackage(void)
145c6c1daeSBarry Smith {
155c6c1daeSBarry Smith   PetscFunctionBegin;
16*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&PetscRandomList));
175c6c1daeSBarry Smith   PetscRandomPackageInitialized = PETSC_FALSE;
185c6c1daeSBarry Smith   PetscRandomRegisterAllCalled  = PETSC_FALSE;
195c6c1daeSBarry Smith   PetscFunctionReturn(0);
205c6c1daeSBarry Smith }
215c6c1daeSBarry Smith 
225c6c1daeSBarry Smith /*@C
235c6c1daeSBarry Smith   PetscRandomInitializePackage - This function initializes everything in the PetscRandom package. It is called
248a690491SBarry 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 
295c6c1daeSBarry Smith .seealso: PetscInitialize()
305c6c1daeSBarry Smith @*/
31607a6623SBarry Smith PetscErrorCode  PetscRandomInitializePackage(void)
325c6c1daeSBarry Smith {
338e81d068SLisandro Dalcin   char           logList[256];
348e81d068SLisandro Dalcin   PetscBool      opt,pkg;
355c6c1daeSBarry Smith 
365c6c1daeSBarry Smith   PetscFunctionBegin;
375c6c1daeSBarry Smith   if (PetscRandomPackageInitialized) PetscFunctionReturn(0);
385c6c1daeSBarry Smith   PetscRandomPackageInitialized = PETSC_TRUE;
395c6c1daeSBarry Smith   /* Register Class */
40*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("PetscRandom",&PETSC_RANDOM_CLASSID));
418e81d068SLisandro Dalcin   /* Register Constructors */
42*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomRegisterAll());
43e94e781bSJacob Faibussowitsch   /* Process Info */
44e94e781bSJacob Faibussowitsch   {
45e94e781bSJacob Faibussowitsch     PetscClassId  classids[1];
46e94e781bSJacob Faibussowitsch 
47e94e781bSJacob Faibussowitsch     classids[0] = PETSC_RANDOM_CLASSID;
48*9566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("random", 1, classids));
498e81d068SLisandro Dalcin   }
508e81d068SLisandro Dalcin   /* Process summary exclusions */
51*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
528e81d068SLisandro Dalcin   if (opt) {
53*9566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("random",logList,',',&pkg));
54*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_RANDOM_CLASSID));
558e81d068SLisandro Dalcin   }
568e81d068SLisandro Dalcin   /* Register package finalizer */
57*9566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(PetscRandomFinalizePackage));
585c6c1daeSBarry Smith   PetscFunctionReturn(0);
595c6c1daeSBarry Smith }
60