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