Actual source code: tscreate.c
1: #define PETSCTS_DLL
3: #include include/private/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 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->prestep = TSDefaultPreStep;
50: t->ops->update = TSDefaultUpdate;
51: t->ops->poststep = TSDefaultPostStep;
53: /* General TS description */
54: t->problem_type = TS_LINEAR;
55: t->vec_sol = PETSC_NULL;
56: t->vec_sol_always = PETSC_NULL;
57: t->numbermonitors = 0;
58: t->isExplicit = PETSC_NULL;
59: t->Iindex = PETSC_NULL;
60: t->ksp = PETSC_NULL;
61: t->A = PETSC_NULL;
62: t->B = PETSC_NULL;
63: t->Arhs = PETSC_NULL;
64: t->Alhs = PETSC_NULL;
65: t->matflg = DIFFERENT_NONZERO_PATTERN;
66: t->snes = PETSC_NULL;
67: t->funP = PETSC_NULL;
68: t->jacP = PETSC_NULL;
69: t->setupcalled = 0;
70: t->data = PETSC_NULL;
71: t->user = PETSC_NULL;
72: t->max_steps = 5000;
73: t->max_time = 5.0;
74: t->time_step = .1;
75: t->time_step_old = t->time_step;
76: t->initial_time_step = t->time_step;
77: t->steps = 0;
78: t->ptime = 0.0;
79: t->linear_its = 0;
80: t->nonlinear_its = 0;
81: t->work = PETSC_NULL;
82: t->nwork = 0;
84: *ts = t;
85: return(0);
86: }
88: /* Set A = 1/dt*Alhs - A, B = 1/dt*Blhs - B */
91: PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str)
92: {
93: PetscTruth flg;
95: PetscScalar mdt = 1.0/ts->time_step;
98: /* this function requires additional work! */
99: PetscTypeCompare((PetscObject)A,MATMFFD,&flg);
100: if (!flg) {
101: MatScale(A,-1.0);
102: if (ts->Alhs){
103: MatAXPY(A,mdt,ts->Alhs,DIFFERENT_NONZERO_PATTERN);
104: } else {
105: MatShift(A,mdt);
106: }
107: }
108: if (B != A && str != SAME_PRECONDITIONER) {
109: MatScale(B,-1.0);
110: MatShift(B,mdt);
111: }
112: return(0);
113: }