Actual source code: dlregispetsc.c

  1: #include <petscdraw.h>
  2: #include <petscviewer.h>
  3: #include <petsc/private/viewerimpl.h>

  5: static PetscBool PetscSysPackageInitialized = PETSC_FALSE;

  7: /*@C
  8:   PetscSysFinalizePackage - This function destroys everything in the system library portion of PETSc.
  9:   It is called from `PetscFinalize()`.

 11:   Level: developer

 13: .seealso: `PetscSysInitializePackage()`, `PetscFinalize()`
 14: @*/
 15: PetscErrorCode PetscSysFinalizePackage(void)
 16: {
 17:   PetscFunctionBegin;
 18:   if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) PetscCallMPI(MPI_Comm_free_keyval(&Petsc_Seq_keyval));
 19:   PetscSysPackageInitialized = PETSC_FALSE;
 20:   PetscFunctionReturn(PETSC_SUCCESS);
 21: }

 23: /*@C
 24:   PetscSysInitializePackage - This function initializes everything in the system library portion of PETSc. It is called
 25:   from `PetscDLLibraryRegister_petsc()` when using dynamic libraries, and in the call to `PetscInitialize()`
 26:   when using shared or static libraries.

 28:   Level: developer

 30:   Note:
 31:   This function never needs to be called by PETSc users.

 33: .seealso: `PetscSysFinalizePackage()`, `PetscInitialize()`
 34: @*/
 35: PetscErrorCode PetscSysInitializePackage(void)
 36: {
 37:   char      logList[256];
 38:   PetscBool opt, pkg;

 40:   PetscFunctionBegin;
 41:   if (PetscSysPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
 42:   PetscSysPackageInitialized = PETSC_TRUE;
 43:   /* Register Classes */
 44:   PetscCall(PetscClassIdRegister("Object", &PETSC_OBJECT_CLASSID));
 45:   PetscCall(PetscClassIdRegister("Container", &PETSC_CONTAINER_CLASSID));

 47:   /* Register Events */
 48:   PetscCall(PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID, &PETSC_Barrier));
 49:   PetscCall(PetscLogEventRegister("BuildTwoSided", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSided));
 50:   PetscCall(PetscLogEventRegister("BuildTwoSidedF", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSidedF));
 51:   /* Process Info */
 52:   {
 53:     PetscClassId classids[1];

 55:     classids[0] = PETSC_SMALLEST_CLASSID;
 56:     PetscCall(PetscInfoProcessClass("sys", 1, classids));
 57:   }
 58:   /* Process summary exclusions */
 59:   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
 60:   if (opt) {
 61:     PetscCall(PetscStrInList("null", logList, ',', &pkg));
 62:     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID));
 63:   }
 64:   PetscCall(PetscRegisterFinalize(PetscSysFinalizePackage));
 65:   PetscFunctionReturn(PETSC_SUCCESS);
 66: }

 68: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)

 70:   #if defined(PETSC_USE_SINGLE_LIBRARY)
 71: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void);
 72: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void);
 73: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void);
 74: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void);
 75: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void);
 76: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void);
 77:   #endif

 79:   /*
 80:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

 82:   This one registers all the system level objects.

 84:  */
 85:   #if defined(PETSC_USE_SINGLE_LIBRARY)
 86: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void)
 87:   #else
 88: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void)
 89:   #endif
 90: {
 91:   PetscFunctionBegin;
 92:   /*
 93:       If we got here then PETSc was properly loaded
 94:   */
 95:   PetscCall(PetscSysInitializePackage());
 96:   PetscCall(PetscDrawInitializePackage());
 97:   PetscCall(PetscViewerInitializePackage());
 98:   PetscCall(PetscRandomInitializePackage());

100:   #if defined(PETSC_USE_SINGLE_LIBRARY)
101:   PetscCall(PetscDLLibraryRegister_petscvec());
102:   PetscCall(PetscDLLibraryRegister_petscmat());
103:   PetscCall(PetscDLLibraryRegister_petscdm());
104:   PetscCall(PetscDLLibraryRegister_petscksp());
105:   PetscCall(PetscDLLibraryRegister_petscsnes());
106:   PetscCall(PetscDLLibraryRegister_petscts());
107:   #endif
108:   PetscFunctionReturn(PETSC_SUCCESS);
109: }
110: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */