Actual source code: dlregists.c

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

  3: static PetscBool TSPackageInitialized = PETSC_FALSE;
  4: /*@C
  5:   TSFinalizePackage - This function destroys everything in the Petsc interface to `TS`. It is
  6:   called from `PetscFinalize()`.

  8:   Level: developer

 10: .seealso: [](chapter_ts), `TS`, `PetscFinalize()`, `TSInitializePackage()`
 11: @*/
 12: PetscErrorCode TSFinalizePackage(void)
 13: {
 14:   PetscFunctionListDestroy(&TSList);
 15:   PetscFunctionListDestroy(&TSTrajectoryList);
 16:   TSPackageInitialized = PETSC_FALSE;
 17:   TSRegisterAllCalled  = PETSC_FALSE;
 18:   return 0;
 19: }

 21: /*@C
 22:   TSInitializePackage - This function initializes everything in the `TS` package. It is called
 23:   from `PetscDLLibraryRegister_petscts()` when using dynamic libraries, and on the first call to `TSCreate()`
 24:   when using shared or static libraries.

 26:   Level: developer

 28: .seealso: [](chapter_ts), `TS`, `PetscInitialize()`, `TSFinalizePackage()`
 29: @*/
 30: PetscErrorCode TSInitializePackage(void)
 31: {
 32:   char      logList[256];
 33:   PetscBool opt, pkg, cls;

 35:   if (TSPackageInitialized) return 0;
 36:   TSPackageInitialized = PETSC_TRUE;
 37:   /* Initialize subpackages */
 38:   TSAdaptInitializePackage();
 39:   TSGLLEInitializePackage();
 40:   TSRKInitializePackage();
 41:   TSGLEEInitializePackage();
 42:   TSARKIMEXInitializePackage();
 43:   TSRosWInitializePackage();
 44:   TSSSPInitializePackage();
 45:   TSGLLEAdaptInitializePackage();
 46:   TSBasicSymplecticInitializePackage();
 47:   /* Register Classes */
 48:   PetscClassIdRegister("TS", &TS_CLASSID);
 49:   PetscClassIdRegister("DMTS", &DMTS_CLASSID);
 50:   PetscClassIdRegister("TSTrajectory", &TSTRAJECTORY_CLASSID);

 52:   /* Register Constructors */
 53:   TSRegisterAll();
 54:   TSTrajectoryRegisterAll();
 55:   /* Register Events */
 56:   PetscLogEventRegister("TSStep", TS_CLASSID, &TS_Step);
 57:   PetscLogEventRegister("TSFunctionEval", TS_CLASSID, &TS_FunctionEval);
 58:   PetscLogEventRegister("TSJacobianEval", TS_CLASSID, &TS_JacobianEval);
 59:   PetscLogEventRegister("TSForwardStep", TS_CLASSID, &TS_ForwardStep);
 60:   PetscLogEventRegister("TSAdjointStep", TS_CLASSID, &TS_AdjointStep);
 61:   PetscLogEventRegister("TSTrajectorySet", TSTRAJECTORY_CLASSID, &TSTrajectory_Set);
 62:   PetscLogEventRegister("TSTrajectoryGet", TSTRAJECTORY_CLASSID, &TSTrajectory_Get);
 63:   PetscLogEventRegister("TSTrajGetVecs", TSTRAJECTORY_CLASSID, &TSTrajectory_GetVecs);
 64:   PetscLogEventRegister("TSTrajSetUp", TSTRAJECTORY_CLASSID, &TSTrajectory_SetUp);
 65:   PetscLogEventRegister("TSTrajDiskWrite", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskWrite);
 66:   PetscLogEventRegister("TSTrajDiskRead", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskRead);
 67:   PetscLogEventRegister("TSPseudoCmptTStp", TS_CLASSID, &TS_PseudoComputeTimeStep);
 68:   /* Process Info */
 69:   {
 70:     PetscClassId classids[4];

 72:     classids[0] = TS_CLASSID;
 73:     classids[1] = DMTS_CLASSID;
 74:     classids[2] = TSADAPT_CLASSID;
 75:     classids[3] = TSTRAJECTORY_CLASSID;
 76:     PetscInfoProcessClass("ts", 1, classids);
 77:     PetscInfoProcessClass("dm", 1, &classids[1]);
 78:     PetscInfoProcessClass("tsadapt", 1, &classids[2]);
 79:     PetscInfoProcessClass("tstrajectory", 1, &classids[3]);
 80:   }
 81:   /* Process summary exclusions */
 82:   PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt);
 83:   if (opt) {
 84:     PetscStrInList("ts", logList, ',', &pkg);
 85:     if (pkg) PetscLogEventExcludeClass(TS_CLASSID);
 86:     PetscStrInList("dm", logList, ',', &cls);
 87:     if (pkg || cls) PetscLogEventExcludeClass(DMTS_CLASSID);
 88:     PetscStrInList("tsadapt", logList, ',', &cls);
 89:     if (pkg || cls) PetscLogEventExcludeClass(TSADAPT_CLASSID);
 90:     PetscStrInList("tstrajectory", logList, ',', &cls);
 91:     if (pkg || cls) PetscLogEventExcludeClass(TSTRAJECTORY_CLASSID);
 92:   }
 93:   /* Register package finalizer */
 94:   PetscRegisterFinalize(TSFinalizePackage);
 95:   return 0;
 96: }

 98: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
 99: /*
100:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

102:   This one registers all the TS methods that are in the basic PETSc libpetscts library.

104:  */
105: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); /*prototype*/
106: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void)
107: {
108:   TSInitializePackage();
109:   return 0;
110: }
111: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */