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