xref: /petsc/src/ts/interface/tscreate.c (revision bcf0153e883cfed9568ef4557dcc209048fb58f7)
1af0996ceSBarry Smith #include <petsc/private/tsimpl.h> /*I "petscts.h"  I*/
2bdad233fSMatthew Knepley 
39371c9d4SSatish Balay const char *const TSConvergedReasons_Shifted[] = {"ADJOINT_DIVERGED_LINEAR_SOLVE", "FORWARD_DIVERGED_LINEAR_SOLVE", "DIVERGED_STEP_REJECTED", "DIVERGED_NONLINEAR_SOLVE", "CONVERGED_ITERATING", "CONVERGED_TIME", "CONVERGED_ITS", "CONVERGED_USER", "CONVERGED_EVENT", "CONVERGED_PSEUDO_FATOL", "CONVERGED_PSEUDO_FATOL", "TSConvergedReason", "TS_", NULL};
422b60d99SBarry Smith const char *const *TSConvergedReasons = TSConvergedReasons_Shifted + 4;
5193ac0bcSJed Brown 
660893bc3SSatish Balay /*@C
7*bcf0153eSBarry Smith   TSCreate - This function creates an empty timestepper. The problem type can then be set with `TSSetProblemType()` and the
8*bcf0153eSBarry Smith        type of solver can then be set with `TSSetType()`.
9bdad233fSMatthew Knepley 
10d083f849SBarry Smith   Collective
11bdad233fSMatthew Knepley 
12bdad233fSMatthew Knepley   Input Parameter:
13bdad233fSMatthew Knepley . comm - The communicator
14bdad233fSMatthew Knepley 
15bdad233fSMatthew Knepley   Output Parameter:
16*bcf0153eSBarry Smith . ts   - The `TS`
17bdad233fSMatthew Knepley 
18bdad233fSMatthew Knepley   Level: beginner
19bdad233fSMatthew Knepley 
2095452b02SPatrick Sanan   Developer Notes:
21*bcf0153eSBarry Smith     `TS` essentially always creates a `SNES` object even though explicit methods do not use it. This is
22efd4aadfSBarry Smith                     unfortunate and should be fixed at some point. The flag snes->usessnes indicates if the
23*bcf0153eSBarry Smith                     particular method does use SNES and regulates if the information about the `SNES` is printed
24*bcf0153eSBarry Smith                     in `TSView()`. `TSSetFromOptions(`) does call `SNESSetFromOptions()` which can lead to users being confused
25*bcf0153eSBarry Smith                     by help messages about meaningless `SNES` options.
26efd4aadfSBarry Smith 
27*bcf0153eSBarry Smith .seealso: [](chapter_ts), `TS`, `SNES`, `TSSetType()`, `TSSetUp()`, `TSDestroy()`, `TSSetProblemType()`
28bdad233fSMatthew Knepley @*/
29d71ae5a4SJacob Faibussowitsch PetscErrorCode TSCreate(MPI_Comm comm, TS *ts)
30d71ae5a4SJacob Faibussowitsch {
31bdad233fSMatthew Knepley   TS t;
32bdad233fSMatthew Knepley 
33bdad233fSMatthew Knepley   PetscFunctionBegin;
34064a246eSJacob Faibussowitsch   PetscValidPointer(ts, 2);
350298fd71SBarry Smith   *ts = NULL;
369566063dSJacob Faibussowitsch   PetscCall(TSInitializePackage());
37bdad233fSMatthew Knepley 
389566063dSJacob Faibussowitsch   PetscCall(PetscHeaderCreate(t, TS_CLASSID, "TS", "Time stepping", "TS", comm, TSDestroy, TSView));
39bdad233fSMatthew Knepley 
40bdad233fSMatthew Knepley   /* General TS description */
41089b2837SJed Brown   t->problem_type  = TS_NONLINEAR;
42ef85077eSLisandro Dalcin   t->equation_type = TS_EQ_UNSPECIFIED;
43ef85077eSLisandro Dalcin 
44cdbf8f93SLisandro Dalcin   t->ptime            = 0.0;
45cdbf8f93SLisandro Dalcin   t->time_step        = 0.1;
46ef85077eSLisandro Dalcin   t->max_time         = PETSC_MAX_REAL;
47ef85077eSLisandro Dalcin   t->exact_final_time = TS_EXACTFINALTIME_UNSPECIFIED;
48bdad233fSMatthew Knepley   t->steps            = 0;
49ef85077eSLisandro Dalcin   t->max_steps        = PETSC_MAX_INT;
50ef85077eSLisandro Dalcin   t->steprestart      = PETSC_TRUE;
51ef85077eSLisandro Dalcin 
52193ac0bcSJed Brown   t->max_snes_failures = 1;
53193ac0bcSJed Brown   t->max_reject        = 10;
54193ac0bcSJed Brown   t->errorifstepfailed = PETSC_TRUE;
55bdad233fSMatthew Knepley 
56ef85077eSLisandro Dalcin   t->rhsjacobian.time  = PETSC_MIN_REAL;
57ef85077eSLisandro Dalcin   t->rhsjacobian.scale = 1.0;
58ef85077eSLisandro Dalcin   t->ijacobian.shift   = 1.0;
5968bece0bSHong Zhang 
60b92453a8SLisandro Dalcin   /* All methods that do adaptivity should specify
61b92453a8SLisandro Dalcin    * its preferred adapt type in their constructor */
62b92453a8SLisandro Dalcin   t->default_adapt_type = TSADAPTNONE;
63ef85077eSLisandro Dalcin   t->atol               = 1e-4;
64ef85077eSLisandro Dalcin   t->rtol               = 1e-4;
65ef85077eSLisandro Dalcin   t->cfltime            = PETSC_MAX_REAL;
66ef85077eSLisandro Dalcin   t->cfltime_local      = PETSC_MAX_REAL;
67715f1b00SHong Zhang 
6887f4e208SHong Zhang   t->num_rhs_splits = 0;
6987f4e208SHong Zhang 
70d60b7d5cSBarry Smith   t->axpy_pattern = UNKNOWN_NONZERO_PATTERN;
71bdad233fSMatthew Knepley   *ts             = t;
72bdad233fSMatthew Knepley   PetscFunctionReturn(0);
73bdad233fSMatthew Knepley }
74