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