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