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    mdt = 1.0/ts->time_step;

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