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