Actual source code: slregis.c
1: #include <petsc/private/characteristicimpl.h>
3: static PetscBool CharacteristicPackageInitialized = PETSC_FALSE;
4: /*@C
5: CharacteristicFinalizePackage - This function destroys everything in the `Characteristics` package. It is
6: called from `PetscFinalize()`.
8: Level: developer
10: .seealso: [](ch_ts), `PetscFinalize()`, `CharacteristicInitializePackage()`
11: @*/
12: PetscErrorCode CharacteristicFinalizePackage(void)
13: {
14: PetscFunctionBegin;
15: PetscCall(PetscFunctionListDestroy(&CharacteristicList));
16: CharacteristicPackageInitialized = PETSC_FALSE;
17: CharacteristicRegisterAllCalled = PETSC_FALSE;
18: PetscFunctionReturn(PETSC_SUCCESS);
19: }
21: /*@C
22: CharacteristicInitializePackage - This function initializes everything in the Characteristic package. It is called
23: from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to CharacteristicCreate()
24: when using static libraries.
26: Level: developer
28: .seealso: [](ch_ts), `PetscInitialize()`, `CharacteristicFinalizePackage()`
29: @*/
30: PetscErrorCode CharacteristicInitializePackage(void)
31: {
32: char logList[256];
33: PetscBool opt, pkg;
35: PetscFunctionBegin;
36: if (CharacteristicPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
37: CharacteristicPackageInitialized = PETSC_TRUE;
38: /* Register Classes */
39: PetscCall(PetscClassIdRegister("Method of Characteristics", &CHARACTERISTIC_CLASSID));
40: /* Register Constructors */
41: PetscCall(CharacteristicRegisterAll());
42: /* Register Events */
43: PetscCall(PetscLogEventRegister("MOCSetUp", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_SetUp));
44: PetscCall(PetscLogEventRegister("MOCSolve", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_Solve));
45: PetscCall(PetscLogEventRegister("MOCQueueSetup", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_QueueSetup));
46: PetscCall(PetscLogEventRegister("MOCDAUpdate", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_DAUpdate));
47: PetscCall(PetscLogEventRegister("MOCHalfTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeLocal));
48: PetscCall(PetscLogEventRegister("MOCHalfTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeRemote));
49: PetscCall(PetscLogEventRegister("MOCHalfTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeExchange));
50: PetscCall(PetscLogEventRegister("MOCFullTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeLocal));
51: PetscCall(PetscLogEventRegister("MOCFullTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeRemote));
52: PetscCall(PetscLogEventRegister("MOCFullTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeExchange));
53: /* Process Info */
54: {
55: PetscClassId classids[1];
57: classids[0] = CHARACTERISTIC_CLASSID;
58: PetscCall(PetscInfoProcessClass("characteristic", 1, classids));
59: }
60: /* Process summary exclusions */
61: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
62: if (opt) {
63: PetscCall(PetscStrInList("characteristic", logList, ',', &pkg));
64: if (pkg) PetscCall(PetscLogEventExcludeClass(CHARACTERISTIC_CLASSID));
65: }
66: /* Process package finalizer */
67: PetscCall(PetscRegisterFinalize(CharacteristicFinalizePackage));
68: PetscFunctionReturn(PETSC_SUCCESS);
69: }
71: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
72: /*
73: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
75: This one registers the method of characteristics code
76: */
77: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsccharacteristic(void)
78: {
79: PetscFunctionBegin;
80: PetscCall(CharacteristicInitializePackage());
81: PetscFunctionReturn(PETSC_SUCCESS);
82: }
84: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */