static PetscErrorCode TSAdaptChoose_CFL(TSAdapt adapt,TS ts,PetscReal h,PetscInt *next_sc,PetscReal *next_h,PetscBool *accept,PetscReal *wlte) { TSAdapt_CFL *cfl = (TSAdapt_CFL*)adapt->data; PetscErrorCode ierr; PetscReal hcfl,cfltime; PetscInt stepno,ncandidates; const PetscInt *order; const PetscReal *ccfl; PetscFunctionBegin; ierr = TSGetTimeStepNumber(ts,&stepno);CHKERRQ(ierr); ierr = TSGetCFLTime(ts,&cfltime);CHKERRQ(ierr); ierr = TSAdaptCandidatesGet(adapt,&ncandidates,&order,NULL,&ccfl,NULL);CHKERRQ(ierr); hcfl = cfl->safety * cfltime * ccfl[0]; if (hcfl < adapt->dt_min) { ierr = PetscInfo4(adapt,"Cannot satisfy CFL constraint %g (with %g safety) at minimum time step %g with method coefficient %g, proceding anyway\n",(double)cfltime,(double)cfl->safety,(double)adapt->dt_min,(double)ccfl[0]);CHKERRQ(ierr); } if (h > cfltime * ccfl[0]) { if (cfl->always_accept) { ierr = PetscInfo3(adapt,"Step length %g with scheme of CFL coefficient %g did not satisfy user-provided CFL constraint %g, proceeding anyway\n",(double)h,(double)ccfl[0],(double)cfltime);CHKERRQ(ierr); } else { ierr = PetscInfo3(adapt,"Step length %g with scheme of CFL coefficient %g did not satisfy user-provided CFL constraint %g, step REJECTED\n",(double)h,(double)ccfl[0],(double)cfltime);CHKERRQ(ierr); *next_sc = 0; *next_h = PetscClipInterval(hcfl,adapt->dt_min,adapt->dt_max); *accept = PETSC_FALSE; } } *next_sc = 0; *next_h = PetscClipInterval(hcfl,adapt->dt_min,adapt->dt_max); *accept = PETSC_TRUE; *wlte = -1; /* Weighted local truncation error was not evaluated */ PetscFunctionReturn(0); }
void PETSC_STDCALL tsgetcfltime_(TS ts,PetscReal *cfltime, int *__ierr ){ *__ierr = TSGetCFLTime( (TS)PetscToPointer((ts) ),cfltime); }