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