Dr. Zhang, Thank you for your reply.
My problem is solved using a slight variation of your suggestions. To
execute your suggestion inside the code, I have used TSGetAdapt and
TSAdaptSetType and set the type to TSADAPTNONE. This solved my problem.
On 11-10-2017 20:49, Zhang, Hong wrote:
By default TSRK uses adaptive time stepping. TSSetTimeStep sets the initial
time step, and the time step will be adapted automatically during the
integration. Since you call TSGetTimeStep after TSSolve, you actually get the
step size for the last time step. To view the step size at each step, run with
-ts_monitor.
If you want to use a fixed step size, you can do -ts_adapt_type none -ts_dt
<value>.
Hong (Mr.)
On Oct 11, 2017, at 12:12 PM, Ali Berk Kahraman <[email protected]>
wrote:
Hello All,
I am trying to use timesteppers, however I have a problem. Whenever I want to
set a dt for the timstepping integration, I cannot succeed. Neither the
function TSSetTimeStep nor the command line option seems to work. Using either
of them(but not at the same time) and setting it to 1, when I call
TSGetTimeStep to learn the value of dt, it gives me the answer 0.002871.
Perhaps this is the default value, however I cannot work with this, since the
equation I have is slowly evolving.
Any ideas what might be causing this?
The part of the code I use,
PetscReal time=0, timestep=1;
int maxsteps=30;
float maxtime=300;
TS ts;
ierr= TSCreate(PETSC_COMM_WORLD,&ts);
CHKERRQ(ierr);
ierr= TSSetProblemType(ts,TS_LINEAR);
CHKERRQ(ierr);
ierr= TSSetSolution(ts, dummyvec);
CHKERRQ(ierr);
ierr= TSSetType(ts,TSRK);
CHKERRQ(ierr);
ierr= TSSetTime(ts,time);
CHKERRQ(ierr);
ierr= TSSetTimeStep(ts,timestep);
CHKERRQ(ierr);
ierr=TSSetExactFinalTime(ts,TS_EXACTFINALTIME_STEPOVER);
CHKERRQ(ierr);
TSSetMaxSteps(ts,maxsteps);
TSSetMaxTime(ts,maxtime);
ierr=TSSetFromOptions(ts);CHKERRQ(ierr);
TSSetRHSFunction(ts,residual,
FormRHSFunction,&mycontext);
ierr= TSSolve(ts,uJi);
CHKERRQ(ierr);
TSView(ts,PETSC_VIEWER_STDOUT_SELF);
TSConvergedReason reason;
ierr=TSGetConvergedReason(ts,&reason);CHKERRQ(ierr);
printf("Why Converged: %d\n",reason);
PetscReal usedtimestep;
TSGetTimeStep(ts,&usedtimestep);
printf("Used timestep: %f\n",usedtimestep);