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