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