Actual source code: slregis.c

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

      3: static PetscBool CharacteristicPackageInitialized = PETSC_FALSE;

      5: /*@C
      6:   CharacteristicFinalizePackage - This function destroys everything in the `Characteristics` package. It is
      7:   called from `PetscFinalize()`.

      9:   Level: developer

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

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

     27:   Level: developer

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

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

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

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

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

     85: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */