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: }