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: [](ch_ts), `TS`, `PetscFinalize()`, `TSInitializePackage()`
11: @*/
12: PetscErrorCode TSFinalizePackage(void)
13: {
14: PetscFunctionBegin;
15: PetscCall(PetscFunctionListDestroy(&TSList));
16: PetscCall(PetscFunctionListDestroy(&TSTrajectoryList));
17: TSPackageInitialized = PETSC_FALSE;
18: TSRegisterAllCalled = PETSC_FALSE;
19: PetscFunctionReturn(PETSC_SUCCESS);
20: }
22: /*@C
23: TSInitializePackage - This function initializes everything in the `TS` package. It is called
24: from `PetscDLLibraryRegister_petscts()` when using dynamic libraries, and on the first call to `TSCreate()`
25: when using shared or static libraries.
27: Level: developer
29: Note:
30: This function never needs to be called by PETSc users.
32: .seealso: [](ch_ts), `TS`, `PetscInitialize()`, `TSFinalizePackage()`
33: @*/
34: PetscErrorCode TSInitializePackage(void)
35: {
36: char logList[256];
37: PetscBool opt, pkg, cls;
39: PetscFunctionBegin;
40: if (TSPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
41: TSPackageInitialized = PETSC_TRUE;
42: /* Initialize subpackages */
43: PetscCall(TSAdaptInitializePackage());
44: PetscCall(TSGLLEInitializePackage());
45: PetscCall(TSRKInitializePackage());
46: PetscCall(TSGLEEInitializePackage());
47: PetscCall(TSARKIMEXInitializePackage());
48: PetscCall(TSRosWInitializePackage());
49: PetscCall(TSSSPInitializePackage());
50: PetscCall(TSGLLEAdaptInitializePackage());
51: PetscCall(TSBasicSymplecticInitializePackage());
52: /* Register Classes */
53: PetscCall(PetscClassIdRegister("TS", &TS_CLASSID));
54: PetscCall(PetscClassIdRegister("DMTS", &DMTS_CLASSID));
55: PetscCall(PetscClassIdRegister("TSTrajectory", &TSTRAJECTORY_CLASSID));
57: /* Register Constructors */
58: PetscCall(TSRegisterAll());
59: PetscCall(TSTrajectoryRegisterAll());
60: /* Register Events */
61: PetscCall(PetscLogEventRegister("TSStep", TS_CLASSID, &TS_Step));
62: PetscCall(PetscLogEventRegister("TSFunctionEval", TS_CLASSID, &TS_FunctionEval));
63: PetscCall(PetscLogEventRegister("TSJacobianEval", TS_CLASSID, &TS_JacobianEval));
64: PetscCall(PetscLogEventRegister("TSForwardStep", TS_CLASSID, &TS_ForwardStep));
65: PetscCall(PetscLogEventRegister("TSAdjointStep", TS_CLASSID, &TS_AdjointStep));
66: PetscCall(PetscLogEventRegister("TSTrajectorySet", TSTRAJECTORY_CLASSID, &TSTrajectory_Set));
67: PetscCall(PetscLogEventRegister("TSTrajectoryGet", TSTRAJECTORY_CLASSID, &TSTrajectory_Get));
68: PetscCall(PetscLogEventRegister("TSTrajGetVecs", TSTRAJECTORY_CLASSID, &TSTrajectory_GetVecs));
69: PetscCall(PetscLogEventRegister("TSTrajSetUp", TSTRAJECTORY_CLASSID, &TSTrajectory_SetUp));
70: PetscCall(PetscLogEventRegister("TSTrajDiskWrite", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskWrite));
71: PetscCall(PetscLogEventRegister("TSTrajDiskRead", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskRead));
72: PetscCall(PetscLogEventRegister("TSPseudoCmptTStp", TS_CLASSID, &TS_PseudoComputeTimeStep));
73: /* Process Info */
74: {
75: PetscClassId classids[4];
77: classids[0] = TS_CLASSID;
78: classids[1] = DMTS_CLASSID;
79: classids[2] = TSADAPT_CLASSID;
80: classids[3] = TSTRAJECTORY_CLASSID;
81: PetscCall(PetscInfoProcessClass("ts", 1, classids));
82: PetscCall(PetscInfoProcessClass("dm", 1, &classids[1]));
83: PetscCall(PetscInfoProcessClass("tsadapt", 1, &classids[2]));
84: PetscCall(PetscInfoProcessClass("tstrajectory", 1, &classids[3]));
85: }
86: /* Process summary exclusions */
87: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
88: if (opt) {
89: PetscCall(PetscStrInList("ts", logList, ',', &pkg));
90: if (pkg) PetscCall(PetscLogEventExcludeClass(TS_CLASSID));
91: PetscCall(PetscStrInList("dm", logList, ',', &cls));
92: if (pkg || cls) PetscCall(PetscLogEventExcludeClass(DMTS_CLASSID));
93: PetscCall(PetscStrInList("tsadapt", logList, ',', &cls));
94: if (pkg || cls) PetscCall(PetscLogEventExcludeClass(TSADAPT_CLASSID));
95: PetscCall(PetscStrInList("tstrajectory", logList, ',', &cls));
96: if (pkg || cls) PetscCall(PetscLogEventExcludeClass(TSTRAJECTORY_CLASSID));
97: }
98: /* Register package finalizer */
99: PetscCall(PetscRegisterFinalize(TSFinalizePackage));
100: PetscFunctionReturn(PETSC_SUCCESS);
101: }
103: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
104: /*
105: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
107: This one registers all the TS methods that are in the basic PETSc libpetscts library.
109: */
110: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); /*prototype*/
111: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void)
112: {
113: PetscFunctionBegin;
114: PetscCall(TSInitializePackage());
115: PetscFunctionReturn(PETSC_SUCCESS);
116: }
117: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */