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