xref: /petsc/src/ts/interface/tscreate.c (revision 715f1b00af42c8aa385eef4857042688c0e6692c)
1af0996ceSBarry Smith #include <petsc/private/tsimpl.h>      /*I "petscts.h"  I*/
2bdad233fSMatthew Knepley 
3193ac0bcSJed Brown const char *const TSConvergedReasons_Shifted[] = {
4193ac0bcSJed Brown   "DIVERGED_STEP_REJECTED",
5193ac0bcSJed Brown   "DIVERGED_NONLINEAR_SOLVE",
6193ac0bcSJed Brown   "CONVERGED_ITERATING",
7193ac0bcSJed Brown   "CONVERGED_TIME",
8193ac0bcSJed Brown   "CONVERGED_ITS",
93118ae5eSBarry Smith   "CONVERGED_USER",
103118ae5eSBarry Smith   "CONVERGED_EVENT",
113118ae5eSBarry Smith   "CONVERGED_PSEUDO_FATOL",
123118ae5eSBarry Smith   "CONVERGED_PSEUDO_FATOL",
13193ac0bcSJed Brown   "TSConvergedReason","TS_",0};
14193ac0bcSJed Brown const char *const*TSConvergedReasons = TSConvergedReasons_Shifted + 2;
15193ac0bcSJed Brown 
1660893bc3SSatish Balay /*@C
17bd6a702fSBarry Smith   TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
18bd6a702fSBarry Smith        type of solver can then be set with TSSetType().
19bdad233fSMatthew Knepley 
20bdad233fSMatthew Knepley   Collective on MPI_Comm
21bdad233fSMatthew Knepley 
22bdad233fSMatthew Knepley   Input Parameter:
23bdad233fSMatthew Knepley . comm - The communicator
24bdad233fSMatthew Knepley 
25bdad233fSMatthew Knepley   Output Parameter:
26bdad233fSMatthew Knepley . ts   - The TS
27bdad233fSMatthew Knepley 
28bdad233fSMatthew Knepley   Level: beginner
29bdad233fSMatthew Knepley 
30efd4aadfSBarry Smith   Developer Notes:  TS essentially always creates a SNES object even though explicit methods do not use it. This is
31efd4aadfSBarry Smith                     unfortunate and should be fixed at some point. The flag snes->usessnes indicates if the
32efd4aadfSBarry Smith                     particular method does use SNES and regulates if the information about the SNES is printed
33efd4aadfSBarry Smith                     in TSView(). TSSetFromOptions() does call SNESSetFromOptions() which can lead to users being confused
34efd4aadfSBarry Smith                     by help messages about meaningless SNES options.
35efd4aadfSBarry Smith 
36bdad233fSMatthew Knepley .keywords: TS, create
3704ceabe5SMatthew G. Knepley .seealso: TSSetType(), TSSetUp(), TSDestroy(), TSSetProblemType()
38bdad233fSMatthew Knepley @*/
390adebc6cSBarry Smith PetscErrorCode  TSCreate(MPI_Comm comm, TS *ts)
400adebc6cSBarry Smith {
41bdad233fSMatthew Knepley   TS             t;
42dfbe8321SBarry Smith   PetscErrorCode ierr;
43bdad233fSMatthew Knepley 
44bdad233fSMatthew Knepley   PetscFunctionBegin;
454482741eSBarry Smith   PetscValidPointer(ts,1);
460298fd71SBarry Smith   *ts = NULL;
47607a6623SBarry Smith   ierr = TSInitializePackage();CHKERRQ(ierr);
48bdad233fSMatthew Knepley 
4973107ff1SLisandro Dalcin   ierr = PetscHeaderCreate(t, TS_CLASSID, "TS", "Time stepping", "TS", comm, TSDestroy, TSView);CHKERRQ(ierr);
50bdad233fSMatthew Knepley 
51bdad233fSMatthew Knepley   /* General TS description */
52089b2837SJed Brown   t->problem_type      = TS_NONLINEAR;
530298fd71SBarry Smith   t->vec_sol           = NULL;
54bdad233fSMatthew Knepley   t->numbermonitors    = 0;
550298fd71SBarry Smith   t->snes              = NULL;
56bdad233fSMatthew Knepley   t->setupcalled       = 0;
570298fd71SBarry Smith   t->data              = NULL;
580298fd71SBarry Smith   t->user              = NULL;
59cdbf8f93SLisandro Dalcin   t->ptime             = 0.0;
60cdbf8f93SLisandro Dalcin   t->time_step         = 0.1;
61bdad233fSMatthew Knepley   t->max_time          = 5.0;
628392e04aSShri Abhyankar   t->steprollback      = PETSC_FALSE;
63e7069c78SShri   t->steprestart       = PETSC_FALSE;
64bdad233fSMatthew Knepley   t->steps             = 0;
65cdbf8f93SLisandro Dalcin   t->max_steps         = 5000;
665ef26d82SJed Brown   t->ksp_its           = 0;
675ef26d82SJed Brown   t->snes_its          = 0;
680298fd71SBarry Smith   t->work              = NULL;
69bdad233fSMatthew Knepley   t->nwork             = 0;
70193ac0bcSJed Brown   t->max_snes_failures = 1;
71193ac0bcSJed Brown   t->max_reject        = 10;
72193ac0bcSJed Brown   t->errorifstepfailed = PETSC_TRUE;
730e4ef248SJed Brown   t->rhsjacobian.time  = -1e20;
74e1244c69SJed Brown   t->rhsjacobian.scale = 1.;
75b41af12eSJed Brown   t->ijacobian.shift   = 1.;
76e817cc15SEmil Constantinescu   t->equation_type     = TS_EQ_UNSPECIFIED;
77bdad233fSMatthew Knepley 
781c3436cfSJed Brown   t->atol             = 1e-4;
791c3436cfSJed Brown   t->rtol             = 1e-4;
808d59e960SJed Brown   t->cfltime          = PETSC_MAX_REAL;
818d59e960SJed Brown   t->cfltime_local    = PETSC_MAX_REAL;
82feed9e9dSBarry Smith   t->exact_final_time = TS_EXACTFINALTIME_UNSPECIFIED;
83814b06c0SHong Zhang   t->vec_costintegral = NULL;
8468bece0bSHong Zhang   t->trajectory       = NULL;
8568bece0bSHong Zhang 
86b92453a8SLisandro Dalcin   /* All methods that do adaptivity should specify
87b92453a8SLisandro Dalcin    * its preferred adapt type in their constructor */
88b92453a8SLisandro Dalcin   t->default_adapt_type = TSADAPTNONE;
89b92453a8SLisandro Dalcin 
90*715f1b00SHong Zhang   t->numcost          = 0;
91*715f1b00SHong Zhang   t->num_parameters   = 0;
92*715f1b00SHong Zhang   t->num_initialvalues= 0;
93*715f1b00SHong Zhang 
94*715f1b00SHong Zhang   t->Jacp             = NULL;
95*715f1b00SHong Zhang   t->vec_costintegral = NULL;
96*715f1b00SHong Zhang   t->vec_costintegrand= NULL;
97*715f1b00SHong Zhang 
98bdad233fSMatthew Knepley   *ts = t;
99bdad233fSMatthew Knepley   PetscFunctionReturn(0);
100bdad233fSMatthew Knepley }
101