Actual source code: tscreate.c
petsc-3.12.5 2020-03-29
1: #include <petsc/private/tsimpl.h>
3: const char *const TSConvergedReasons_Shifted[] = {
4: "ADJOINT_DIVERGED_LINEAR_SOLVE",
5: "FORWARD_DIVERGED_LINEAR_SOLVE",
6: "DIVERGED_STEP_REJECTED",
7: "DIVERGED_NONLINEAR_SOLVE",
8: "CONVERGED_ITERATING",
9: "CONVERGED_TIME",
10: "CONVERGED_ITS",
11: "CONVERGED_USER",
12: "CONVERGED_EVENT",
13: "CONVERGED_PSEUDO_FATOL",
14: "CONVERGED_PSEUDO_FATOL",
15: "TSConvergedReason","TS_",0};
16: const char *const*TSConvergedReasons = TSConvergedReasons_Shifted + 4;
18: /*@C
19: TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the
20: type of solver can then be set with TSSetType().
22: Collective
24: Input Parameter:
25: . comm - The communicator
27: Output Parameter:
28: . ts - The TS
30: Level: beginner
32: Developer Notes:
33: TS essentially always creates a SNES object even though explicit methods do not use it. This is
34: unfortunate and should be fixed at some point. The flag snes->usessnes indicates if the
35: particular method does use SNES and regulates if the information about the SNES is printed
36: in TSView(). TSSetFromOptions() does call SNESSetFromOptions() which can lead to users being confused
37: by help messages about meaningless SNES options.
39: .seealso: TSSetType(), TSSetUp(), TSDestroy(), TSSetProblemType()
40: @*/
41: PetscErrorCode TSCreate(MPI_Comm comm, TS *ts)
42: {
43: TS t;
48: *ts = NULL;
49: TSInitializePackage();
51: PetscHeaderCreate(t, TS_CLASSID, "TS", "Time stepping", "TS", comm, TSDestroy, TSView);
53: /* General TS description */
54: t->problem_type = TS_NONLINEAR;
55: t->equation_type = TS_EQ_UNSPECIFIED;
57: t->ptime = 0.0;
58: t->time_step = 0.1;
59: t->max_time = PETSC_MAX_REAL;
60: t->exact_final_time = TS_EXACTFINALTIME_UNSPECIFIED;
61: t->steps = 0;
62: t->max_steps = PETSC_MAX_INT;
63: t->steprestart = PETSC_TRUE;
65: t->max_snes_failures = 1;
66: t->max_reject = 10;
67: t->errorifstepfailed = PETSC_TRUE;
69: t->rhsjacobian.time = PETSC_MIN_REAL;
70: t->rhsjacobian.scale = 1.0;
71: t->ijacobian.shift = 1.0;
73: /* All methods that do adaptivity should specify
74: * its preferred adapt type in their constructor */
75: t->default_adapt_type = TSADAPTNONE;
76: t->atol = 1e-4;
77: t->rtol = 1e-4;
78: t->cfltime = PETSC_MAX_REAL;
79: t->cfltime_local = PETSC_MAX_REAL;
81: t->num_rhs_splits = 0;
83: *ts = t;
84: return(0);
85: }