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