Actual source code: tscreate.c
1: #define PETSCTS_DLL
3: #include private/tsimpl.h
5: #if 0
8: static PetscErrorCode TSPublish_Petsc(PetscObject obj)
9: {
11: return(0);
12: }
13: #endif
15: #undef __FUNCT__
17: /*@C
18: TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
19: type of solver can then be set with TSSetType().
21: Collective on MPI_Comm
23: Input Parameter:
24: . comm - The communicator
26: Output Parameter:
27: . ts - The TS
29: Level: beginner
31: .keywords: TS, create
32: .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType()
33: @*/
34: PetscErrorCode TSCreate(MPI_Comm comm, TS *ts) {
35: TS t;
40: *ts = PETSC_NULL;
41: #ifndef PETSC_USE_DYNAMIC_LIBRARIES
42: TSInitializePackage(PETSC_NULL);
43: #endif
45: PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_COOKIE, -1, "TS", comm, TSDestroy, TSView);
46: PetscMemzero(t->ops, sizeof(struct _TSOps));
48: t->ops->prestep = TSDefaultPreStep;
49: t->ops->update = TSDefaultUpdate;
50: t->ops->poststep = TSDefaultPostStep;
52: /* General TS description */
53: t->problem_type = TS_LINEAR;
54: t->vec_sol = PETSC_NULL;
55: t->vec_sol_always = PETSC_NULL;
56: t->numbermonitors = 0;
57: t->isExplicit = PETSC_NULL;
58: t->Iindex = PETSC_NULL;
59: t->ksp = PETSC_NULL;
60: t->A = PETSC_NULL;
61: t->B = PETSC_NULL;
62: t->Arhs = PETSC_NULL;
63: t->Alhs = PETSC_NULL;
64: t->matflg = DIFFERENT_NONZERO_PATTERN;
65: t->snes = PETSC_NULL;
66: t->funP = PETSC_NULL;
67: t->jacP = PETSC_NULL;
68: t->setupcalled = 0;
69: t->data = PETSC_NULL;
70: t->user = PETSC_NULL;
71: t->max_steps = 5000;
72: t->max_time = 5.0;
73: t->time_step = .1;
74: t->time_step_old = t->time_step;
75: t->initial_time_step = t->time_step;
76: t->steps = 0;
77: t->ptime = 0.0;
78: t->linear_its = 0;
79: t->nonlinear_its = 0;
80: t->work = PETSC_NULL;
81: t->nwork = 0;
83: *ts = t;
84: return(0);
85: }
87: /* Set A = 1/dt*Alhs - A, B = 1/dt*Blhs - B */
90: PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str)
91: {
92: PetscTruth flg;
94: PetscScalar mdt = 1.0/ts->time_step;
97: /* this function requires additional work! */
98: PetscTypeCompare((PetscObject)A,MATMFFD,&flg);
99: if (!flg) {
100: MatScale(A,-1.0);
101: if (ts->Alhs){
102: MatAXPY(A,mdt,ts->Alhs,DIFFERENT_NONZERO_PATTERN);
103: } else {
104: MatShift(A,mdt);
105: }
106: }
107: if (B != A && str != SAME_PRECONDITIONER) {
108: MatScale(B,-1.0);
109: MatShift(B,mdt);
110: }
111: return(0);
112: }