xref: /petsc/src/ts/characteristic/interface/slregis.c (revision 1cc06b555e92f8ec64db10330b8bbd830e5bc876)
1af0996ceSBarry Smith #include <petsc/private/characteristicimpl.h>
2af33a6ddSJed Brown 
3af33a6ddSJed Brown static PetscBool CharacteristicPackageInitialized = PETSC_FALSE;
4af33a6ddSJed Brown /*@C
5bcf0153eSBarry Smith   CharacteristicFinalizePackage - This function destroys everything in the `Characteristics` package. It is
6bcf0153eSBarry Smith   called from `PetscFinalize()`.
7af33a6ddSJed Brown 
8af33a6ddSJed Brown   Level: developer
9af33a6ddSJed Brown 
10*1cc06b55SBarry Smith .seealso: [](ch_ts), `PetscFinalize()`, `CharacteristicInitializePackage()`
11af33a6ddSJed Brown @*/
12d71ae5a4SJacob Faibussowitsch PetscErrorCode CharacteristicFinalizePackage(void)
13d71ae5a4SJacob Faibussowitsch {
14af33a6ddSJed Brown   PetscFunctionBegin;
159566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&CharacteristicList));
16af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_FALSE;
17af33a6ddSJed Brown   CharacteristicRegisterAllCalled  = PETSC_FALSE;
183ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
19af33a6ddSJed Brown }
20af33a6ddSJed Brown 
21af33a6ddSJed Brown /*@C
22af33a6ddSJed Brown   CharacteristicInitializePackage - This function initializes everything in the Characteristic package. It is called
23af33a6ddSJed Brown   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to CharacteristicCreate()
24af33a6ddSJed Brown   when using static libraries.
25af33a6ddSJed Brown 
26af33a6ddSJed Brown   Level: developer
27af33a6ddSJed Brown 
28*1cc06b55SBarry Smith .seealso: [](ch_ts), `PetscInitialize()`, `CharacteristicFinalizePackage()`
29af33a6ddSJed Brown @*/
30d71ae5a4SJacob Faibussowitsch PetscErrorCode CharacteristicInitializePackage(void)
31d71ae5a4SJacob Faibussowitsch {
32af33a6ddSJed Brown   char      logList[256];
338e81d068SLisandro Dalcin   PetscBool opt, pkg;
34af33a6ddSJed Brown 
35af33a6ddSJed Brown   PetscFunctionBegin;
363ba16761SJacob Faibussowitsch   if (CharacteristicPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
37af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_TRUE;
38af33a6ddSJed Brown   /* Register Classes */
399566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Method of Characteristics", &CHARACTERISTIC_CLASSID));
40af33a6ddSJed Brown   /* Register Constructors */
419566063dSJacob Faibussowitsch   PetscCall(CharacteristicRegisterAll());
42af33a6ddSJed Brown   /* Register Events */
439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCSetUp", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_SetUp));
449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCSolve", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_Solve));
459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCQueueSetup", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_QueueSetup));
469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCDAUpdate", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_DAUpdate));
479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeLocal));
489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeRemote));
499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeExchange));
509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeLocal));
519566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeRemote));
529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeExchange));
53e94e781bSJacob Faibussowitsch   /* Process Info */
54e94e781bSJacob Faibussowitsch   {
55e94e781bSJacob Faibussowitsch     PetscClassId classids[1];
56e94e781bSJacob Faibussowitsch 
57e94e781bSJacob Faibussowitsch     classids[0] = CHARACTERISTIC_CLASSID;
589566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("characteristic", 1, classids));
59af33a6ddSJed Brown   }
60af33a6ddSJed Brown   /* Process summary exclusions */
619566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
62af33a6ddSJed Brown   if (opt) {
639566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("characteristic", logList, ',', &pkg));
649566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(CHARACTERISTIC_CLASSID));
65af33a6ddSJed Brown   }
668e81d068SLisandro Dalcin   /* Process package finalizer */
679566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(CharacteristicFinalizePackage));
683ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
69af33a6ddSJed Brown }
70af33a6ddSJed Brown 
71aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
72af33a6ddSJed Brown /*
73af33a6ddSJed Brown   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
74af33a6ddSJed Brown 
75af33a6ddSJed Brown   This one registers the method of characteristics code
76af33a6ddSJed Brown  */
77d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsccharacteristic(void)
78d71ae5a4SJacob Faibussowitsch {
79af33a6ddSJed Brown   PetscFunctionBegin;
809566063dSJacob Faibussowitsch   PetscCall(CharacteristicInitializePackage());
813ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
82af33a6ddSJed Brown }
83af33a6ddSJed Brown 
84aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
85