Actual source code: slregis.c

  1: #include <petsc/private/characteristicimpl.h>

  3: static PetscBool CharacteristicPackageInitialized = PETSC_FALSE;
  4: /*@C
  5:   CharacteristicFinalizePackage - This function destroys everything in the `Characteristics` package. It is
  6:   called from `PetscFinalize()`.

  8:   Level: developer

 10: .seealso: [](ch_ts), `PetscFinalize()`, `CharacteristicInitializePackage()`
 11: @*/
 12: PetscErrorCode CharacteristicFinalizePackage(void)
 13: {
 14:   PetscFunctionBegin;
 15:   PetscCall(PetscFunctionListDestroy(&CharacteristicList));
 16:   CharacteristicPackageInitialized = PETSC_FALSE;
 17:   CharacteristicRegisterAllCalled  = PETSC_FALSE;
 18:   PetscFunctionReturn(PETSC_SUCCESS);
 19: }

 21: /*@C
 22:   CharacteristicInitializePackage - This function initializes everything in the Characteristic package. It is called
 23:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to CharacteristicCreate()
 24:   when using static libraries.

 26:   Level: developer

 28: .seealso: [](ch_ts), `PetscInitialize()`, `CharacteristicFinalizePackage()`
 29: @*/
 30: PetscErrorCode CharacteristicInitializePackage(void)
 31: {
 32:   char      logList[256];
 33:   PetscBool opt, pkg;

 35:   PetscFunctionBegin;
 36:   if (CharacteristicPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
 37:   CharacteristicPackageInitialized = PETSC_TRUE;
 38:   /* Register Classes */
 39:   PetscCall(PetscClassIdRegister("Method of Characteristics", &CHARACTERISTIC_CLASSID));
 40:   /* Register Constructors */
 41:   PetscCall(CharacteristicRegisterAll());
 42:   /* Register Events */
 43:   PetscCall(PetscLogEventRegister("MOCSetUp", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_SetUp));
 44:   PetscCall(PetscLogEventRegister("MOCSolve", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_Solve));
 45:   PetscCall(PetscLogEventRegister("MOCQueueSetup", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_QueueSetup));
 46:   PetscCall(PetscLogEventRegister("MOCDAUpdate", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_DAUpdate));
 47:   PetscCall(PetscLogEventRegister("MOCHalfTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeLocal));
 48:   PetscCall(PetscLogEventRegister("MOCHalfTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeRemote));
 49:   PetscCall(PetscLogEventRegister("MOCHalfTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_HalfTimeExchange));
 50:   PetscCall(PetscLogEventRegister("MOCFullTimeLocal", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeLocal));
 51:   PetscCall(PetscLogEventRegister("MOCFullTimeRemot", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeRemote));
 52:   PetscCall(PetscLogEventRegister("MOCFullTimeExchg", CHARACTERISTIC_CLASSID, &CHARACTERISTIC_FullTimeExchange));
 53:   /* Process Info */
 54:   {
 55:     PetscClassId classids[1];

 57:     classids[0] = CHARACTERISTIC_CLASSID;
 58:     PetscCall(PetscInfoProcessClass("characteristic", 1, classids));
 59:   }
 60:   /* Process summary exclusions */
 61:   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
 62:   if (opt) {
 63:     PetscCall(PetscStrInList("characteristic", logList, ',', &pkg));
 64:     if (pkg) PetscCall(PetscLogEventExcludeClass(CHARACTERISTIC_CLASSID));
 65:   }
 66:   /* Process package finalizer */
 67:   PetscCall(PetscRegisterFinalize(CharacteristicFinalizePackage));
 68:   PetscFunctionReturn(PETSC_SUCCESS);
 69: }

 71: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
 72: /*
 73:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

 75:   This one registers the method of characteristics code
 76:  */
 77: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsccharacteristic(void)
 78: {
 79:   PetscFunctionBegin;
 80:   PetscCall(CharacteristicInitializePackage());
 81:   PetscFunctionReturn(PETSC_SUCCESS);
 82: }

 84: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */