xref: /petsc/src/ts/interface/tscreate.c (revision 7c4f633dc6bb6149cca88d301ead35a99e103cbb)
163dd3a1aSKris Buschelman #define PETSCTS_DLL
2bdad233fSMatthew Knepley 
3*7c4f633dSBarry Smith #include "private/tsimpl.h"      /*I "petscts.h"  I*/
4bdad233fSMatthew Knepley 
57adad957SLisandro Dalcin #if 0
6bdad233fSMatthew Knepley #undef __FUNCT__
7bdad233fSMatthew Knepley #define __FUNCT__ "TSPublish_Petsc"
86849ba73SBarry Smith static PetscErrorCode TSPublish_Petsc(PetscObject obj)
9bdad233fSMatthew Knepley {
10bdad233fSMatthew Knepley   PetscFunctionBegin;
11bdad233fSMatthew Knepley   PetscFunctionReturn(0);
12bdad233fSMatthew Knepley }
137adad957SLisandro Dalcin #endif
14bdad233fSMatthew Knepley 
15bdad233fSMatthew Knepley #undef  __FUNCT__
16bdad233fSMatthew Knepley #define __FUNCT__ "TSCreate"
1760893bc3SSatish Balay /*@C
18bd6a702fSBarry Smith   TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
19bd6a702fSBarry Smith        type of solver can then be set with TSSetType().
20bdad233fSMatthew Knepley 
21bdad233fSMatthew Knepley   Collective on MPI_Comm
22bdad233fSMatthew Knepley 
23bdad233fSMatthew Knepley   Input Parameter:
24bdad233fSMatthew Knepley . comm - The communicator
25bdad233fSMatthew Knepley 
26bdad233fSMatthew Knepley   Output Parameter:
27bdad233fSMatthew Knepley . ts   - The TS
28bdad233fSMatthew Knepley 
29bdad233fSMatthew Knepley   Level: beginner
30bdad233fSMatthew Knepley 
31bdad233fSMatthew Knepley .keywords: TS, create
32bd6a702fSBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType()
33bdad233fSMatthew Knepley @*/
3463dd3a1aSKris Buschelman PetscErrorCode PETSCTS_DLLEXPORT TSCreate(MPI_Comm comm, TS *ts) {
35bdad233fSMatthew Knepley   TS             t;
36dfbe8321SBarry Smith   PetscErrorCode ierr;
37bdad233fSMatthew Knepley 
38bdad233fSMatthew Knepley   PetscFunctionBegin;
394482741eSBarry Smith   PetscValidPointer(ts,1);
40bdad233fSMatthew Knepley   *ts = PETSC_NULL;
41bdad233fSMatthew Knepley #ifndef PETSC_USE_DYNAMIC_LIBRARIES
42bdad233fSMatthew Knepley   ierr = TSInitializePackage(PETSC_NULL);CHKERRQ(ierr);
43bdad233fSMatthew Knepley #endif
44bdad233fSMatthew Knepley 
4552e6d16bSBarry Smith   ierr = PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_COOKIE, -1, "TS", comm, TSDestroy, TSView);CHKERRQ(ierr);
46bdad233fSMatthew Knepley   ierr = PetscMemzero(t->ops, sizeof(struct _TSOps));CHKERRQ(ierr);
47bdad233fSMatthew Knepley 
48bdad233fSMatthew Knepley   t->ops->prestep       = TSDefaultPreStep;
49bdad233fSMatthew Knepley   t->ops->update        = TSDefaultUpdate;
50bdad233fSMatthew Knepley   t->ops->poststep      = TSDefaultPostStep;
51bdad233fSMatthew Knepley 
52bdad233fSMatthew Knepley   /* General TS description */
53bdad233fSMatthew Knepley   t->problem_type       = TS_LINEAR;
54bdad233fSMatthew Knepley   t->vec_sol            = PETSC_NULL;
55bdad233fSMatthew Knepley   t->vec_sol_always     = PETSC_NULL;
56bdad233fSMatthew Knepley   t->numbermonitors     = 0;
57bdad233fSMatthew Knepley   t->isExplicit         = PETSC_NULL;
58bdad233fSMatthew Knepley   t->Iindex             = PETSC_NULL;
5994b7f48cSBarry Smith   t->ksp                = PETSC_NULL;
60bdad233fSMatthew Knepley   t->A                  = PETSC_NULL;
61bdad233fSMatthew Knepley   t->B                  = PETSC_NULL;
628beb423aSHong Zhang   t->Arhs               = PETSC_NULL;
63aa644b49SHong Zhang   t->Alhs               = PETSC_NULL;
6495f0b562SHong Zhang   t->matflg             = DIFFERENT_NONZERO_PATTERN;
65bdad233fSMatthew Knepley   t->snes               = PETSC_NULL;
66bdad233fSMatthew Knepley   t->funP               = PETSC_NULL;
67bdad233fSMatthew Knepley   t->jacP               = PETSC_NULL;
68bdad233fSMatthew Knepley   t->setupcalled        = 0;
69bdad233fSMatthew Knepley   t->data               = PETSC_NULL;
70bdad233fSMatthew Knepley   t->user               = PETSC_NULL;
71bdad233fSMatthew Knepley   t->max_steps          = 5000;
72bdad233fSMatthew Knepley   t->max_time           = 5.0;
73bdad233fSMatthew Knepley   t->time_step          = .1;
74bdad233fSMatthew Knepley   t->time_step_old      = t->time_step;
75bdad233fSMatthew Knepley   t->initial_time_step  = t->time_step;
76bdad233fSMatthew Knepley   t->steps              = 0;
77bdad233fSMatthew Knepley   t->ptime              = 0.0;
78bdad233fSMatthew Knepley   t->linear_its         = 0;
79bdad233fSMatthew Knepley   t->nonlinear_its      = 0;
80bdad233fSMatthew Knepley   t->work               = PETSC_NULL;
81bdad233fSMatthew Knepley   t->nwork              = 0;
82bdad233fSMatthew Knepley 
83bdad233fSMatthew Knepley   *ts = t;
84bdad233fSMatthew Knepley   PetscFunctionReturn(0);
85bdad233fSMatthew Knepley }
86bdad233fSMatthew Knepley 
87aa644b49SHong Zhang /* Set A = 1/dt*Alhs - A, B = 1/dt*Blhs - B */
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;
94efb30889SBarry Smith   PetscScalar    mdt = 1.0/ts->time_step;
95b0f6e734SBarry Smith 
96b0f6e734SBarry Smith   PetscFunctionBegin;
976e07ea4bSHong Zhang   /* this function requires additional work! */
988beb423aSHong Zhang   ierr = PetscTypeCompare((PetscObject)A,MATMFFD,&flg);CHKERRQ(ierr);
99b0f6e734SBarry Smith   if (!flg) {
1008beb423aSHong Zhang     ierr = MatScale(A,-1.0);CHKERRQ(ierr);
101aa644b49SHong Zhang     if (ts->Alhs){
1028beb423aSHong Zhang       ierr = MatAXPY(A,mdt,ts->Alhs,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
103aa644b49SHong Zhang     } else {
1048beb423aSHong Zhang       ierr = MatShift(A,mdt);CHKERRQ(ierr);
105b0f6e734SBarry Smith     }
106aa644b49SHong Zhang   }
1078beb423aSHong Zhang   if (B != A && str != SAME_PRECONDITIONER) {
1088beb423aSHong Zhang     ierr = MatScale(B,-1.0);CHKERRQ(ierr);
1098beb423aSHong Zhang     ierr = MatShift(B,mdt);CHKERRQ(ierr);
110b0f6e734SBarry Smith   }
111b0f6e734SBarry Smith   PetscFunctionReturn(0);
112b0f6e734SBarry Smith }
113