xref: /petsc/src/ts/characteristic/interface/slregis.c (revision 9c5460f9064ca60dd71a234a1f6faf93e7a6b0c9)
1af0996ceSBarry Smith #include <petsc/private/characteristicimpl.h>
2af33a6ddSJed Brown 
3af33a6ddSJed Brown static PetscBool CharacteristicPackageInitialized = PETSC_FALSE;
4*66976f2fSJacob Faibussowitsch 
5af33a6ddSJed Brown /*@C
6bcf0153eSBarry Smith   CharacteristicFinalizePackage - This function destroys everything in the `Characteristics` package. It is
7bcf0153eSBarry Smith   called from `PetscFinalize()`.
8af33a6ddSJed Brown 
9af33a6ddSJed Brown   Level: developer
10af33a6ddSJed Brown 
111cc06b55SBarry Smith .seealso: [](ch_ts), `PetscFinalize()`, `CharacteristicInitializePackage()`
12af33a6ddSJed Brown @*/
CharacteristicFinalizePackage(void)13d71ae5a4SJacob Faibussowitsch PetscErrorCode CharacteristicFinalizePackage(void)
14d71ae5a4SJacob Faibussowitsch {
15af33a6ddSJed Brown   PetscFunctionBegin;
169566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&CharacteristicList));
17af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_FALSE;
18af33a6ddSJed Brown   CharacteristicRegisterAllCalled  = PETSC_FALSE;
193ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
20af33a6ddSJed Brown }
21af33a6ddSJed Brown 
22af33a6ddSJed Brown /*@C
23af33a6ddSJed Brown   CharacteristicInitializePackage - This function initializes everything in the Characteristic package. It is called
24af33a6ddSJed Brown   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to CharacteristicCreate()
25af33a6ddSJed Brown   when using static libraries.
26af33a6ddSJed Brown 
27af33a6ddSJed Brown   Level: developer
28af33a6ddSJed Brown 
291cc06b55SBarry Smith .seealso: [](ch_ts), `PetscInitialize()`, `CharacteristicFinalizePackage()`
30af33a6ddSJed Brown @*/
CharacteristicInitializePackage(void)31d71ae5a4SJacob Faibussowitsch PetscErrorCode CharacteristicInitializePackage(void)
32d71ae5a4SJacob Faibussowitsch {
33af33a6ddSJed Brown   char      logList[256];
348e81d068SLisandro Dalcin   PetscBool opt, pkg;
35af33a6ddSJed Brown 
36af33a6ddSJed Brown   PetscFunctionBegin;
373ba16761SJacob Faibussowitsch   if (CharacteristicPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
38af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_TRUE;
39af33a6ddSJed Brown   /* Register Classes */
409566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Method of Characteristics", &CHARACTERISTIC_CLASSID));
41af33a6ddSJed Brown   /* Register Constructors */
429566063dSJacob Faibussowitsch   PetscCall(CharacteristicRegisterAll());
43af33a6ddSJed Brown   /* Register Events */
449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCSetUp", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_SetUp));
459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCSolve", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_Solve));
469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCQueueSetup", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_QueueSetup));
479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCDAUpdate", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_DAUpdate));
489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeLocal));
499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeRemote));
509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCHalfTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeExchange));
519566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeLocal));
529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeRemote));
539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MOCFullTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeExchange));
54e94e781bSJacob Faibussowitsch   /* Process Info */
55e94e781bSJacob Faibussowitsch   {
56e94e781bSJacob Faibussowitsch     PetscClassId classids[1];
57e94e781bSJacob Faibussowitsch 
58e94e781bSJacob Faibussowitsch     classids[0] = CHARACTERISTIC_CLASSID;
599566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("characteristic", 1, classids));
60af33a6ddSJed Brown   }
61af33a6ddSJed Brown   /* Process summary exclusions */
629566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
63af33a6ddSJed Brown   if (opt) {
649566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("characteristic", logList, ',', &pkg));
659566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(CHARACTERISTIC_CLASSID));
66af33a6ddSJed Brown   }
678e81d068SLisandro Dalcin   /* Process package finalizer */
689566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(CharacteristicFinalizePackage));
693ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
70af33a6ddSJed Brown }
71af33a6ddSJed Brown 
72aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
73af33a6ddSJed Brown /*
74af33a6ddSJed Brown   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
75af33a6ddSJed Brown 
76af33a6ddSJed Brown   This one registers the method of characteristics code
77af33a6ddSJed Brown  */
PetscDLLibraryRegister_petsccharacteristic(void)78d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsccharacteristic(void)
79d71ae5a4SJacob Faibussowitsch {
80af33a6ddSJed Brown   PetscFunctionBegin;
819566063dSJacob Faibussowitsch   PetscCall(CharacteristicInitializePackage());
823ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
83af33a6ddSJed Brown }
84af33a6ddSJed Brown 
85aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
86