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