Actual source code: tscreate.c

      1: #define PETSCTS_DLL

     3:  #include src/ts/tsimpl.h

      7: static PetscErrorCode TSPublish_Petsc(PetscObject obj)
      8: {
     10:   return(0);
     11: }

     13: #undef  __FUNCT__
     15: /*@C
     16:   TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
     17:        type of solver can then be set with TSSetType().

     19:   Collective on MPI_Comm

     21:   Input Parameter:
     22: . comm - The communicator

     24:   Output Parameter:
     25: . ts   - The TS

     27:   Level: beginner

     29: .keywords: TS, create
     30: .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType()
     31: @*/
     32: PetscErrorCode PETSCTS_DLLEXPORT TSCreate(MPI_Comm comm, TS *ts) {
     33:   TS             t;

     38:   *ts = PETSC_NULL;
     39: #ifndef PETSC_USE_DYNAMIC_LIBRARIES
     40:   TSInitializePackage(PETSC_NULL);
     41: #endif

     43:   PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_COOKIE, -1, "TS", comm, TSDestroy, TSView);
     44:   PetscLogObjectMemory(t, sizeof(struct _p_TS));
     45:   PetscMemzero(t->ops, sizeof(struct _TSOps));
     46:   t->bops->publish    = TSPublish_Petsc;
     47:   t->type_name        = PETSC_NULL;

     49:   t->ops->applymatrixbc = TSDefaultSystemMatrixBC;
     50:   t->ops->applyrhsbc    = TSDefaultRhsBC;
     51:   t->ops->applysolbc    = TSDefaultSolutionBC;
     52:   t->ops->prestep       = TSDefaultPreStep;
     53:   t->ops->update        = TSDefaultUpdate;
     54:   t->ops->poststep      = TSDefaultPostStep;

     56:   /* General TS description */
     57:   t->problem_type       = TS_LINEAR;
     58:   t->vec_sol            = PETSC_NULL;
     59:   t->vec_sol_always     = PETSC_NULL;
     60:   t->numbermonitors     = 0;
     61:   t->isGTS              = PETSC_FALSE;
     62:   t->isExplicit         = PETSC_NULL;
     63:   t->Iindex             = PETSC_NULL;
     64:   t->ksp               = PETSC_NULL;
     65:   t->A                  = PETSC_NULL;
     66:   t->B                  = PETSC_NULL;
     67:   t->snes               = PETSC_NULL;
     68:   t->funP               = PETSC_NULL;
     69:   t->jacP               = PETSC_NULL;
     70:   t->setupcalled        = 0;
     71:   t->data               = PETSC_NULL;
     72:   t->user               = PETSC_NULL;
     73:   t->max_steps          = 5000;
     74:   t->max_time           = 5.0;
     75:   t->time_step          = .1;
     76:   t->time_step_old      = t->time_step;
     77:   t->initial_time_step  = t->time_step;
     78:   t->steps              = 0;
     79:   t->ptime              = 0.0;
     80:   t->linear_its         = 0;
     81:   t->nonlinear_its      = 0;
     82:   t->work               = PETSC_NULL;
     83:   t->nwork              = 0;

     85:   *ts = t;
     86:   return(0);
     87: }

     91: PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str)
     92: {
     93:   PetscTruth     flg;
     95:   PetscScalar    mone = -1,mdt = 1.0/ts->time_step;

     98:   PetscTypeCompare((PetscObject)ts->A,MATMFFD,&flg);
     99:   if (!flg) {
    100:     MatScale(ts->A,mone);
    101:     MatShift(ts->A,mdt);
    102:   }
    103:   if (ts->B != ts->A && str != SAME_PRECONDITIONER) {
    104:     MatScale(ts->B,mone);
    105:     MatShift(ts->B,mdt);
    106:   }
    107:   return(0);
    108: }