xref: /petsc/src/ts/interface/tscreate.c (revision 52e6d16ba989af9362d0fcebb12e73dd7c9666ed)
1bdad233fSMatthew Knepley 
2c98f2c1aSMatthew Knepley #include "src/ts/tsimpl.h"      /*I "petscts.h"  I*/
3bdad233fSMatthew Knepley 
4bdad233fSMatthew Knepley #undef __FUNCT__
5bdad233fSMatthew Knepley #define __FUNCT__ "TSPublish_Petsc"
66849ba73SBarry Smith static PetscErrorCode TSPublish_Petsc(PetscObject obj)
7bdad233fSMatthew Knepley {
8bdad233fSMatthew Knepley   PetscFunctionBegin;
9bdad233fSMatthew Knepley   PetscFunctionReturn(0);
10bdad233fSMatthew Knepley }
11bdad233fSMatthew Knepley 
12bdad233fSMatthew Knepley #undef  __FUNCT__
13bdad233fSMatthew Knepley #define __FUNCT__ "TSCreate"
1460893bc3SSatish Balay /*@C
15bd6a702fSBarry Smith   TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
16bd6a702fSBarry Smith        type of solver can then be set with TSSetType().
17bdad233fSMatthew Knepley 
18bdad233fSMatthew Knepley   Collective on MPI_Comm
19bdad233fSMatthew Knepley 
20bdad233fSMatthew Knepley   Input Parameter:
21bdad233fSMatthew Knepley . comm - The communicator
22bdad233fSMatthew Knepley 
23bdad233fSMatthew Knepley   Output Parameter:
24bdad233fSMatthew Knepley . ts   - The TS
25bdad233fSMatthew Knepley 
26bdad233fSMatthew Knepley   Level: beginner
27bdad233fSMatthew Knepley 
28bdad233fSMatthew Knepley .keywords: TS, create
29bd6a702fSBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType()
30bdad233fSMatthew Knepley @*/
31dfbe8321SBarry Smith PetscErrorCode TSCreate(MPI_Comm comm, TS *ts) {
32bdad233fSMatthew Knepley   TS             t;
33dfbe8321SBarry Smith   PetscErrorCode ierr;
34bdad233fSMatthew Knepley 
35bdad233fSMatthew Knepley   PetscFunctionBegin;
364482741eSBarry Smith   PetscValidPointer(ts,1);
37bdad233fSMatthew Knepley   *ts = PETSC_NULL;
38bdad233fSMatthew Knepley #ifndef PETSC_USE_DYNAMIC_LIBRARIES
39bdad233fSMatthew Knepley   ierr = TSInitializePackage(PETSC_NULL);CHKERRQ(ierr);
40bdad233fSMatthew Knepley #endif
41bdad233fSMatthew Knepley 
42*52e6d16bSBarry Smith   ierr = PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_COOKIE, -1, "TS", comm, TSDestroy, TSView);CHKERRQ(ierr);
43*52e6d16bSBarry Smith   ierr = PetscLogObjectMemory(t, sizeof(struct _p_TS));CHKERRQ(ierr);
44bdad233fSMatthew Knepley   ierr = PetscMemzero(t->ops, sizeof(struct _TSOps));CHKERRQ(ierr);
45bdad233fSMatthew Knepley   t->bops->publish    = TSPublish_Petsc;
46bdad233fSMatthew Knepley   t->type_name        = PETSC_NULL;
47bdad233fSMatthew Knepley 
48bdad233fSMatthew Knepley   t->ops->applymatrixbc = TSDefaultSystemMatrixBC;
49bdad233fSMatthew Knepley   t->ops->applyrhsbc    = TSDefaultRhsBC;
50bdad233fSMatthew Knepley   t->ops->applysolbc    = TSDefaultSolutionBC;
51bdad233fSMatthew Knepley   t->ops->prestep       = TSDefaultPreStep;
52bdad233fSMatthew Knepley   t->ops->update        = TSDefaultUpdate;
53bdad233fSMatthew Knepley   t->ops->poststep      = TSDefaultPostStep;
54bdad233fSMatthew Knepley 
55bdad233fSMatthew Knepley   /* General TS description */
56bdad233fSMatthew Knepley   t->problem_type       = TS_LINEAR;
57bdad233fSMatthew Knepley   t->vec_sol            = PETSC_NULL;
58bdad233fSMatthew Knepley   t->vec_sol_always     = PETSC_NULL;
59bdad233fSMatthew Knepley   t->numbermonitors     = 0;
60bdad233fSMatthew Knepley   t->isGTS              = PETSC_FALSE;
61bdad233fSMatthew Knepley   t->isExplicit         = PETSC_NULL;
62bdad233fSMatthew Knepley   t->Iindex             = PETSC_NULL;
6394b7f48cSBarry Smith   t->ksp               = PETSC_NULL;
64bdad233fSMatthew Knepley   t->A                  = PETSC_NULL;
65bdad233fSMatthew Knepley   t->B                  = PETSC_NULL;
66bdad233fSMatthew Knepley   t->snes               = PETSC_NULL;
67bdad233fSMatthew Knepley   t->funP               = PETSC_NULL;
68bdad233fSMatthew Knepley   t->jacP               = PETSC_NULL;
69bdad233fSMatthew Knepley   t->setupcalled        = 0;
70bdad233fSMatthew Knepley   t->data               = PETSC_NULL;
71bdad233fSMatthew Knepley   t->user               = PETSC_NULL;
72bdad233fSMatthew Knepley   t->max_steps          = 5000;
73bdad233fSMatthew Knepley   t->max_time           = 5.0;
74bdad233fSMatthew Knepley   t->time_step          = .1;
75bdad233fSMatthew Knepley   t->time_step_old      = t->time_step;
76bdad233fSMatthew Knepley   t->initial_time_step  = t->time_step;
77bdad233fSMatthew Knepley   t->steps              = 0;
78bdad233fSMatthew Knepley   t->ptime              = 0.0;
79bdad233fSMatthew Knepley   t->linear_its         = 0;
80bdad233fSMatthew Knepley   t->nonlinear_its      = 0;
81bdad233fSMatthew Knepley   t->work               = PETSC_NULL;
82bdad233fSMatthew Knepley   t->nwork              = 0;
83bdad233fSMatthew Knepley 
84bdad233fSMatthew Knepley   *ts = t;
85bdad233fSMatthew Knepley   PetscFunctionReturn(0);
86bdad233fSMatthew Knepley }
87bdad233fSMatthew Knepley 
88b0f6e734SBarry Smith #undef __FUNCT__
89b0f6e734SBarry Smith #define __FUNCT__ "TSScaleShiftMatrices"
90b0f6e734SBarry Smith PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str)
91b0f6e734SBarry Smith {
92b0f6e734SBarry Smith   PetscTruth     flg;
93b0f6e734SBarry Smith   PetscErrorCode ierr;
94b0f6e734SBarry Smith   PetscScalar    mone = -1,mdt = 1.0/ts->time_step;
95b0f6e734SBarry Smith 
96b0f6e734SBarry Smith   PetscFunctionBegin;
97b0f6e734SBarry Smith   ierr = PetscTypeCompare((PetscObject)ts->A,MATMFFD,&flg);CHKERRQ(ierr);
98b0f6e734SBarry Smith   if (!flg) {
99b0f6e734SBarry Smith     ierr = MatScale(&mone,ts->A);CHKERRQ(ierr);
100b0f6e734SBarry Smith     ierr = MatShift(&mdt,ts->A);CHKERRQ(ierr);
101b0f6e734SBarry Smith   }
102b0f6e734SBarry Smith   if (ts->B != ts->A && str != SAME_PRECONDITIONER) {
103b0f6e734SBarry Smith     ierr = MatScale(&mone,ts->B);CHKERRQ(ierr);
104b0f6e734SBarry Smith     ierr = MatShift(&mdt,ts->B);CHKERRQ(ierr);
105b0f6e734SBarry Smith   }
106b0f6e734SBarry Smith   PetscFunctionReturn(0);
107b0f6e734SBarry Smith }
108