Actual source code: dlregists.c

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

      3: static PetscBool TSPackageInitialized = PETSC_FALSE;
      4: /*@C
      5:   TSFinalizePackage - This function destroys everything in the PETSc interface to `TS`. It is
      6:   called from `PetscFinalize()`.

      8:   Level: developer

     10: .seealso: [](ch_ts), `TS`, `PetscFinalize()`, `TSInitializePackage()`
     11: @*/
     12: PetscErrorCode TSFinalizePackage(void)
     13: {
     14:   PetscFunctionBegin;
     15:   PetscCall(PetscFunctionListDestroy(&TSList));
     16:   PetscCall(PetscFunctionListDestroy(&TSTrajectoryList));
     17:   TSPackageInitialized = PETSC_FALSE;
     18:   TSRegisterAllCalled  = PETSC_FALSE;
     19:   PetscFunctionReturn(PETSC_SUCCESS);
     20: }

     22: /*@C
     23:   TSInitializePackage - This function initializes everything in the `TS` package. It is called
     24:   from `PetscDLLibraryRegister_petscts()` when using dynamic libraries, and on the first call to `TSCreate()`
     25:   when using shared or static libraries.

     27:   Level: developer

     29:   Note:
     30:   This function never needs to be called by PETSc users.

     32: .seealso: [](ch_ts), `TS`, `PetscInitialize()`, `TSFinalizePackage()`
     33: @*/
     34: PetscErrorCode TSInitializePackage(void)
     35: {
     36:   char      logList[256];
     37:   PetscBool opt, pkg, cls;

     39:   PetscFunctionBegin;
     40:   if (TSPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
     41:   TSPackageInitialized = PETSC_TRUE;
     42:   /* Initialize subpackages */
     43:   PetscCall(TSAdaptInitializePackage());
     44:   PetscCall(TSGLLEInitializePackage());
     45:   PetscCall(TSRKInitializePackage());
     46:   PetscCall(TSGLEEInitializePackage());
     47:   PetscCall(TSARKIMEXInitializePackage());
     48:   PetscCall(TSRosWInitializePackage());
     49:   PetscCall(TSSSPInitializePackage());
     50:   PetscCall(TSGLLEAdaptInitializePackage());
     51:   PetscCall(TSBasicSymplecticInitializePackage());
     52:   /* Register Classes */
     53:   PetscCall(PetscClassIdRegister("TS", &TS_CLASSID));
     54:   PetscCall(PetscClassIdRegister("DMTS", &DMTS_CLASSID));
     55:   PetscCall(PetscClassIdRegister("TSTrajectory", &TSTRAJECTORY_CLASSID));

     57:   /* Register Constructors */
     58:   PetscCall(TSRegisterAll());
     59:   PetscCall(TSTrajectoryRegisterAll());
     60:   /* Register Events */
     61:   PetscCall(PetscLogEventRegister("TSStep", TS_CLASSID, &TS_Step));
     62:   PetscCall(PetscLogEventRegister("TSFunctionEval", TS_CLASSID, &TS_FunctionEval));
     63:   PetscCall(PetscLogEventRegister("TSJacobianEval", TS_CLASSID, &TS_JacobianEval));
     64:   PetscCall(PetscLogEventRegister("TSForwardStep", TS_CLASSID, &TS_ForwardStep));
     65:   PetscCall(PetscLogEventRegister("TSAdjointStep", TS_CLASSID, &TS_AdjointStep));
     66:   PetscCall(PetscLogEventRegister("TSTrajectorySet", TSTRAJECTORY_CLASSID, &TSTrajectory_Set));
     67:   PetscCall(PetscLogEventRegister("TSTrajectoryGet", TSTRAJECTORY_CLASSID, &TSTrajectory_Get));
     68:   PetscCall(PetscLogEventRegister("TSTrajGetVecs", TSTRAJECTORY_CLASSID, &TSTrajectory_GetVecs));
     69:   PetscCall(PetscLogEventRegister("TSTrajSetUp", TSTRAJECTORY_CLASSID, &TSTrajectory_SetUp));
     70:   PetscCall(PetscLogEventRegister("TSTrajDiskWrite", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskWrite));
     71:   PetscCall(PetscLogEventRegister("TSTrajDiskRead", TSTRAJECTORY_CLASSID, &TSTrajectory_DiskRead));
     72:   PetscCall(PetscLogEventRegister("TSPseudoCmptTStp", TS_CLASSID, &TS_PseudoComputeTimeStep));
     73:   /* Process Info */
     74:   {
     75:     PetscClassId classids[4];

     77:     classids[0] = TS_CLASSID;
     78:     classids[1] = DMTS_CLASSID;
     79:     classids[2] = TSADAPT_CLASSID;
     80:     classids[3] = TSTRAJECTORY_CLASSID;
     81:     PetscCall(PetscInfoProcessClass("ts", 1, classids));
     82:     PetscCall(PetscInfoProcessClass("dm", 1, &classids[1]));
     83:     PetscCall(PetscInfoProcessClass("tsadapt", 1, &classids[2]));
     84:     PetscCall(PetscInfoProcessClass("tstrajectory", 1, &classids[3]));
     85:   }
     86:   /* Process summary exclusions */
     87:   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
     88:   if (opt) {
     89:     PetscCall(PetscStrInList("ts", logList, ',', &pkg));
     90:     if (pkg) PetscCall(PetscLogEventExcludeClass(TS_CLASSID));
     91:     PetscCall(PetscStrInList("dm", logList, ',', &cls));
     92:     if (pkg || cls) PetscCall(PetscLogEventExcludeClass(DMTS_CLASSID));
     93:     PetscCall(PetscStrInList("tsadapt", logList, ',', &cls));
     94:     if (pkg || cls) PetscCall(PetscLogEventExcludeClass(TSADAPT_CLASSID));
     95:     PetscCall(PetscStrInList("tstrajectory", logList, ',', &cls));
     96:     if (pkg || cls) PetscCall(PetscLogEventExcludeClass(TSTRAJECTORY_CLASSID));
     97:   }
     98:   /* Register package finalizer */
     99:   PetscCall(PetscRegisterFinalize(TSFinalizePackage));
    100:   PetscFunctionReturn(PETSC_SUCCESS);
    101: }

    103: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
    104: /*
    105:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

    107:   This one registers all the TS methods that are in the basic PETSc libpetscts library.

    109:  */
    110: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); /*prototype*/
    111: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void)
    112: {
    113:   PetscFunctionBegin;
    114:   PetscCall(TSInitializePackage());
    115:   PetscFunctionReturn(PETSC_SUCCESS);
    116: }
    117: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */