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);



Reply via email to