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