xref: /petsc/src/ts/interface/tscreate.c (revision 3f02e49b19195914bf17f317a25cb39636853415)
1 #include <petsc/private/tsimpl.h> /*I "petscts.h"  I*/
2 
3 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};
4 const char *const *TSConvergedReasons = TSConvergedReasons_Shifted + 4;
5 
6 /*@
7   TSCreate - This function creates an empty timestepper. The problem type can then be set with `TSSetProblemType()` and the
8   type of solver can then be set with `TSSetType()`.
9 
10   Collective
11 
12   Input Parameter:
13 . comm - The communicator
14 
15   Output Parameter:
16 . ts - The `TS`
17 
18   Level: beginner
19 
20   Developer Notes:
21   `TS` essentially always creates a `SNES` object even though explicit methods do not use it. This is
22   unfortunate and should be fixed at some point. The flag snes->usessnes indicates if the
23   particular method does use SNES and regulates if the information about the `SNES` is printed
24   in `TSView()`. `TSSetFromOptions(`) does call `SNESSetFromOptions()` which can lead to users being confused
25   by help messages about meaningless `SNES` options.
26 
27 .seealso: [](ch_ts), `TS`, `SNES`, `TSSetType()`, `TSSetUp()`, `TSDestroy()`, `TSSetProblemType()`
28 @*/
29 PetscErrorCode TSCreate(MPI_Comm comm, TS *ts)
30 {
31   TS t;
32 
33   PetscFunctionBegin;
34   PetscAssertPointer(ts, 2);
35   PetscCall(TSInitializePackage());
36 
37   PetscCall(PetscHeaderCreate(t, TS_CLASSID, "TS", "Time stepping", "TS", comm, TSDestroy, TSView));
38 
39   /* General TS description */
40   t->problem_type  = TS_NONLINEAR;
41   t->equation_type = TS_EQ_UNSPECIFIED;
42 
43   t->ptime            = 0.0;
44   t->time_step        = 0.1;
45   t->max_time         = PETSC_MAX_REAL;
46   t->exact_final_time = TS_EXACTFINALTIME_UNSPECIFIED;
47   t->steps            = 0;
48   PetscObjectParameterSetDefault(t, max_steps, PETSC_INT_MAX);
49   PetscObjectParameterSetDefault(t, run_steps, PETSC_INT_MAX);
50   t->steprestart = PETSC_TRUE;
51 
52   t->max_snes_failures = 1;
53   t->max_reject        = 10;
54   t->errorifstepfailed = PETSC_TRUE;
55 
56   t->rhsjacobian.time  = PETSC_MIN_REAL;
57   t->rhsjacobian.scale = 1.0;
58   t->ijacobian.shift   = 1.0;
59 
60   /* All methods that do adaptivity should specify
61    * its preferred adapt type in their constructor */
62   t->default_adapt_type = TSADAPTNONE;
63   t->atol               = 1e-4;
64   t->rtol               = 1e-4;
65   t->cfltime            = PETSC_MAX_REAL;
66   t->cfltime_local      = PETSC_MAX_REAL;
67 
68   t->num_rhs_splits = 0;
69 
70   t->axpy_pattern = UNKNOWN_NONZERO_PATTERN;
71   *ts             = t;
72   PetscFunctionReturn(PETSC_SUCCESS);
73 }
74