Actual source code: tscreate.c
1: #include <petsc/private/tsimpl.h>
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;
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()`.
10: Collective
12: Input Parameter:
13: . comm - The communicator
15: Output Parameter:
16: . ts - The `TS`
18: Level: beginner
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.
27: .seealso: [](ch_ts), `TS`, `SNES`, `TSSetType()`, `TSSetUp()`, `TSDestroy()`, `TSSetProblemType()`
28: @*/
29: PetscErrorCode TSCreate(MPI_Comm comm, TS *ts)
30: {
31: TS t;
33: PetscFunctionBegin;
34: PetscAssertPointer(ts, 2);
35: PetscCall(TSInitializePackage());
37: PetscCall(PetscHeaderCreate(t, TS_CLASSID, "TS", "Time stepping", "TS", comm, TSDestroy, TSView));
39: /* General TS description */
40: t->problem_type = TS_NONLINEAR;
41: t->equation_type = TS_EQ_UNSPECIFIED;
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: t->max_steps = PETSC_INT_MAX;
49: t->steprestart = PETSC_TRUE;
51: t->max_snes_failures = 1;
52: t->max_reject = 10;
53: t->errorifstepfailed = PETSC_TRUE;
55: t->rhsjacobian.time = PETSC_MIN_REAL;
56: t->rhsjacobian.scale = 1.0;
57: t->ijacobian.shift = 1.0;
59: /* All methods that do adaptivity should specify
60: * its preferred adapt type in their constructor */
61: t->default_adapt_type = TSADAPTNONE;
62: t->atol = 1e-4;
63: t->rtol = 1e-4;
64: t->cfltime = PETSC_MAX_REAL;
65: t->cfltime_local = PETSC_MAX_REAL;
67: t->num_rhs_splits = 0;
69: t->axpy_pattern = UNKNOWN_NONZERO_PATTERN;
70: *ts = t;
71: PetscFunctionReturn(PETSC_SUCCESS);
72: }