xref: /petsc/src/ts/characteristic/interface/slregis.c (revision 519f805a543c2a7f195bcba21173bb2cdfadb956)
1b45d2f2cSJed Brown #include <petsc-private/characteristicimpl.h>
2af33a6ddSJed Brown 
3af33a6ddSJed Brown static PetscBool  CharacteristicPackageInitialized = PETSC_FALSE;
4af33a6ddSJed Brown #undef __FUNCT__
5af33a6ddSJed Brown #define __FUNCT__ "CharacteristicFinalizePackage"
6af33a6ddSJed Brown /*@C
7af33a6ddSJed Brown   CharacteristicFinalizePackage - This function destroys everything in the Petsc interface to the characteristics package. It is
8af33a6ddSJed Brown   called from PetscFinalize().
9af33a6ddSJed Brown 
10af33a6ddSJed Brown   Level: developer
11af33a6ddSJed Brown 
12af33a6ddSJed Brown .keywords: Petsc, destroy, package, mathematica
13af33a6ddSJed Brown .seealso: PetscFinalize()
14af33a6ddSJed Brown @*/
15af33a6ddSJed Brown PetscErrorCode CharacteristicFinalizePackage(void)
16af33a6ddSJed Brown {
17af33a6ddSJed Brown   PetscFunctionBegin;
18af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_FALSE;
19af33a6ddSJed Brown   CharacteristicRegisterAllCalled = PETSC_FALSE;
20af33a6ddSJed Brown   CharacteristicList              = PETSC_NULL;
21af33a6ddSJed Brown   PetscFunctionReturn(0);
22af33a6ddSJed Brown }
23af33a6ddSJed Brown 
24af33a6ddSJed Brown #undef __FUNCT__
25af33a6ddSJed Brown #define __FUNCT__ "CharacteristicInitializePackage"
26af33a6ddSJed Brown /*@C
27af33a6ddSJed Brown   CharacteristicInitializePackage - This function initializes everything in the Characteristic package. It is called
28af33a6ddSJed Brown   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to CharacteristicCreate()
29af33a6ddSJed Brown   when using static libraries.
30af33a6ddSJed Brown 
31af33a6ddSJed Brown   Input Parameter:
32af33a6ddSJed Brown   path - The dynamic library path, or PETSC_NULL
33af33a6ddSJed Brown 
34af33a6ddSJed Brown   Level: developer
35af33a6ddSJed Brown 
36af33a6ddSJed Brown .keywords: Characteristic, initialize, package
37af33a6ddSJed Brown .seealso: PetscInitialize()
38af33a6ddSJed Brown @*/
39af33a6ddSJed Brown PetscErrorCode CharacteristicInitializePackage(const char path[])
40af33a6ddSJed Brown {
41af33a6ddSJed Brown   char              logList[256];
42af33a6ddSJed Brown   char             *className;
43af33a6ddSJed Brown   PetscBool         opt;
44af33a6ddSJed Brown   PetscErrorCode    ierr;
45af33a6ddSJed Brown 
46af33a6ddSJed Brown   PetscFunctionBegin;
47af33a6ddSJed Brown   if (CharacteristicPackageInitialized) PetscFunctionReturn(0);
48af33a6ddSJed Brown   CharacteristicPackageInitialized = PETSC_TRUE;
49af33a6ddSJed Brown   /* Register Classes */
50af33a6ddSJed Brown   ierr = PetscClassIdRegister("Method of Characteristics",&CHARACTERISTIC_CLASSID);CHKERRQ(ierr);
51af33a6ddSJed Brown   /* Register Constructors */
52af33a6ddSJed Brown   ierr = CharacteristicRegisterAll(path);CHKERRQ(ierr);
53af33a6ddSJed Brown   /* Register Events */
54af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCSetUp",         CHARACTERISTIC_CLASSID,&CHARACTERISTIC_SetUp);CHKERRQ(ierr);
55af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCSolve",         CHARACTERISTIC_CLASSID,&CHARACTERISTIC_Solve);CHKERRQ(ierr);
56af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCQueueSetup",    CHARACTERISTIC_CLASSID,&CHARACTERISTIC_QueueSetup);CHKERRQ(ierr);
57af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCDAUpdate",      CHARACTERISTIC_CLASSID,&CHARACTERISTIC_DAUpdate);CHKERRQ(ierr);
58af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCHalfTimeLocal", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_HalfTimeLocal);CHKERRQ(ierr);
59af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCHalfTimeRemot", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_HalfTimeRemote);CHKERRQ(ierr);
60af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCHalfTimeExchg", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_HalfTimeExchange);CHKERRQ(ierr);
61af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCFullTimeLocal", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_FullTimeLocal);CHKERRQ(ierr);
62af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCFullTimeRemot", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_FullTimeRemote);CHKERRQ(ierr);
63af33a6ddSJed Brown   ierr = PetscLogEventRegister("MOCFullTimeExchg", CHARACTERISTIC_CLASSID,&CHARACTERISTIC_FullTimeExchange);CHKERRQ(ierr);
64af33a6ddSJed Brown   /* Process info exclusions */
65af33a6ddSJed Brown   ierr = PetscOptionsGetString(PETSC_NULL, "-log_info_exclude", logList, 256, &opt);CHKERRQ(ierr);
66af33a6ddSJed Brown   if (opt) {
67af33a6ddSJed Brown     ierr = PetscStrstr(logList, "characteristic", &className);CHKERRQ(ierr);
68af33a6ddSJed Brown     if (className) {
69af33a6ddSJed Brown       ierr = PetscInfoDeactivateClass(CHARACTERISTIC_CLASSID);CHKERRQ(ierr);
70af33a6ddSJed Brown     }
71af33a6ddSJed Brown   }
72af33a6ddSJed Brown   /* Process summary exclusions */
73af33a6ddSJed Brown   ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
74af33a6ddSJed Brown   if (opt) {
75af33a6ddSJed Brown     ierr = PetscStrstr(logList, "characteristic", &className);CHKERRQ(ierr);
76af33a6ddSJed Brown     if (className) {
77af33a6ddSJed Brown       ierr = PetscLogEventDeactivateClass(CHARACTERISTIC_CLASSID);CHKERRQ(ierr);
78af33a6ddSJed Brown     }
79af33a6ddSJed Brown   }
80af33a6ddSJed Brown   ierr = PetscRegisterFinalize(CharacteristicFinalizePackage);CHKERRQ(ierr);
81af33a6ddSJed Brown   PetscFunctionReturn(0);
82af33a6ddSJed Brown }
83af33a6ddSJed Brown 
84*519f805aSKarl Rupp #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
85af33a6ddSJed Brown EXTERN_C_BEGIN
86af33a6ddSJed Brown #undef __FUNCT__
87af33a6ddSJed Brown #define __FUNCT__ "PetscDLLibraryRegister_characteristic"
88af33a6ddSJed Brown /*
89af33a6ddSJed Brown   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
90af33a6ddSJed Brown 
91af33a6ddSJed Brown   This one registers the method of characteristics code
92af33a6ddSJed Brown 
93af33a6ddSJed Brown   Input Parameter:
94af33a6ddSJed Brown   path - library path
95af33a6ddSJed Brown  */
96af33a6ddSJed Brown PetscErrorCode PetscDLLibraryRegister_petsccharacteristic(const char path[])
97af33a6ddSJed Brown {
98af33a6ddSJed Brown   PetscErrorCode ierr;
99af33a6ddSJed Brown 
100af33a6ddSJed Brown   PetscFunctionBegin;
101af33a6ddSJed Brown   ierr = CharacteristicInitializePackage(path);CHKERRQ(ierr);
102af33a6ddSJed Brown   PetscFunctionReturn(0);
103af33a6ddSJed Brown }
104af33a6ddSJed Brown EXTERN_C_END
105af33a6ddSJed Brown 
106af33a6ddSJed Brown #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
107