xref: /petsc/src/ts/adapt/impls/basic/adaptbasic.c (revision 84df9cb40eca90ea9b18a456fab7a4ecc7f6c1a4)
1*84df9cb4SJed Brown #include <private/tsimpl.h> /*I "petscts.h" I*/
2*84df9cb4SJed Brown 
3*84df9cb4SJed Brown typedef struct {
4*84df9cb4SJed Brown   PetscReal atol;               /* Absolute tolerance for errors committed in one time step */
5*84df9cb4SJed Brown   PetscReal rtol;               /* Relative tolerance */
6*84df9cb4SJed Brown   PetscReal rmin,rmax;          /* safety factors for increasing/decreasing step size */
7*84df9cb4SJed Brown   PetscReal nu;
8*84df9cb4SJed Brown } TSAdapt_Basic;
9*84df9cb4SJed Brown 
10*84df9cb4SJed Brown #undef __FUNCT__
11*84df9cb4SJed Brown #define __FUNCT__ "TSAdaptChoose_Basic_1"
12*84df9cb4SJed Brown static PetscErrorCode TSAdaptChoose_Basic_1(TSAdapt adapt,TS ts,PetscReal h,PetscInt *next_sc,PetscReal *next_h,PetscBool *accept)
13*84df9cb4SJed Brown {
14*84df9cb4SJed Brown   PETSC_UNUSED TSAdapt_Basic *basic = (TSAdapt_Basic*)adapt->data;
15*84df9cb4SJed Brown   PETSC_UNUSED PetscErrorCode ierr;
16*84df9cb4SJed Brown 
17*84df9cb4SJed Brown   PetscFunctionBegin;
18*84df9cb4SJed Brown   *next_sc = 0;
19*84df9cb4SJed Brown   *next_h = h;
20*84df9cb4SJed Brown   *accept = PETSC_TRUE;
21*84df9cb4SJed Brown   PetscFunctionReturn(0);
22*84df9cb4SJed Brown }
23*84df9cb4SJed Brown 
24*84df9cb4SJed Brown #undef __FUNCT__
25*84df9cb4SJed Brown #define __FUNCT__ "TSAdaptDestroy_Basic"
26*84df9cb4SJed Brown static PetscErrorCode TSAdaptDestroy_Basic(TSAdapt adapt)
27*84df9cb4SJed Brown {
28*84df9cb4SJed Brown   PetscErrorCode ierr;
29*84df9cb4SJed Brown 
30*84df9cb4SJed Brown   PetscFunctionBegin;
31*84df9cb4SJed Brown   ierr = PetscFree(adapt->data);CHKERRQ(ierr);
32*84df9cb4SJed Brown   PetscFunctionReturn(0);
33*84df9cb4SJed Brown }
34*84df9cb4SJed Brown 
35*84df9cb4SJed Brown EXTERN_C_BEGIN
36*84df9cb4SJed Brown #undef __FUNCT__
37*84df9cb4SJed Brown #define __FUNCT__ "TSAdaptCreate_Basic"
38*84df9cb4SJed Brown /*MC
39*84df9cb4SJed Brown    TSADAPTBASIC - Basic adaptive controller for time stepping
40*84df9cb4SJed Brown 
41*84df9cb4SJed Brown    Level: intermediate
42*84df9cb4SJed Brown 
43*84df9cb4SJed Brown .seealso: TS, TSAdapt, TSSetAdapt()
44*84df9cb4SJed Brown M*/
45*84df9cb4SJed Brown PetscErrorCode TSAdaptCreate_Basic(TSAdapt adapt)
46*84df9cb4SJed Brown {
47*84df9cb4SJed Brown   PetscErrorCode ierr;
48*84df9cb4SJed Brown   TSAdapt_Basic *a;
49*84df9cb4SJed Brown 
50*84df9cb4SJed Brown   PetscFunctionBegin;
51*84df9cb4SJed Brown   ierr = PetscNewLog(adapt,TSAdapt_Basic,&a);CHKERRQ(ierr);
52*84df9cb4SJed Brown   adapt->data = (void*)a;
53*84df9cb4SJed Brown   adapt->ops->choose = TSAdaptChoose_Basic_1;
54*84df9cb4SJed Brown   adapt->ops->destroy = TSAdaptDestroy_Basic;
55*84df9cb4SJed Brown   PetscFunctionReturn(0);
56*84df9cb4SJed Brown }
57*84df9cb4SJed Brown EXTERN_C_END
58