xref: /petsc/src/ts/tests/ex29.c (revision e1db57b00ec97ce1e7dbc3914c7d12e8c5b5b2ae)
14a658b32SHong Zhang static char help[] ="Tests TS time span \n\n";
24a658b32SHong Zhang 
34a658b32SHong Zhang #include <petscts.h>
44a658b32SHong Zhang 
54a658b32SHong Zhang static PetscErrorCode RHSFunction(TS ts,PetscReal t,Vec X,Vec F,void *ctx)
64a658b32SHong Zhang {
74a658b32SHong Zhang   PetscInt          i,n;
84a658b32SHong Zhang   const PetscScalar *xx;
9*e1db57b0SHong Zhang   PetscScalar       *ff;
104a658b32SHong Zhang 
114a658b32SHong Zhang   PetscFunctionBegin;
124a658b32SHong Zhang   PetscCall(VecGetLocalSize(X,&n));
134a658b32SHong Zhang   PetscCall(VecGetArrayRead(X,&xx));
144a658b32SHong Zhang   PetscCall(VecGetArray(F,&ff));
154a658b32SHong Zhang   if (n >= 1) ff[0] = 1;
164a658b32SHong Zhang   for (i = 1; i < n; i++) ff[i] = (i+1)*(xx[i-1]+PetscPowReal(t,i))/2;
174a658b32SHong Zhang   PetscCall(VecRestoreArrayRead(X,&xx));
184a658b32SHong Zhang   PetscCall(VecRestoreArray(F,&ff));
194a658b32SHong Zhang   PetscFunctionReturn(0);
204a658b32SHong Zhang }
214a658b32SHong Zhang 
224a658b32SHong Zhang int main(int argc, char *argv[])
234a658b32SHong Zhang {
244a658b32SHong Zhang   TS              ts;
254a658b32SHong Zhang   Vec             X,*Xs;
264a658b32SHong Zhang   PetscInt        i,n,N = 9;
27*e1db57b0SHong Zhang   PetscReal       tspan[8] = {16.0, 16.1, 16.2, 16.3, 16.4, 16.5, 16.6, 16.7};
284a658b32SHong Zhang   const PetscReal *tspan2;
294a658b32SHong Zhang 
304a658b32SHong Zhang   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
314a658b32SHong Zhang   PetscCall(TSCreate(PETSC_COMM_SELF,&ts));
324a658b32SHong Zhang   PetscCall(TSSetType(ts,TSRK));
334a658b32SHong Zhang   PetscCall(TSSetRHSFunction(ts,NULL,RHSFunction,NULL));
344a658b32SHong Zhang   PetscCall(VecCreateSeq(PETSC_COMM_SELF,N,&X));
354a658b32SHong Zhang   PetscCall(VecZeroEntries(X));
36*e1db57b0SHong Zhang   PetscCall(TSSetTimeStep(ts,0.001));
37*e1db57b0SHong Zhang   PetscCall(TSSetTimeSpan(ts,8,tspan));
384a658b32SHong Zhang   PetscCall(TSSetExactFinalTime(ts,TS_EXACTFINALTIME_MATCHSTEP));
394a658b32SHong Zhang   PetscCall(TSSetFromOptions(ts));
404a658b32SHong Zhang   PetscCall(TSSolve(ts,X));
414a658b32SHong Zhang   PetscCall(TSGetTimeSpanSolutions(ts,&n,&Xs));
424a658b32SHong Zhang   PetscCall(TSGetTimeSpan(ts,&n,&tspan2));
434a658b32SHong Zhang   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Time Span: "));
444a658b32SHong Zhang   for (i=0; i<n; i++) PetscCall(PetscPrintf(PETSC_COMM_WORLD," %g",(double)tspan2[i]));
454a658b32SHong Zhang   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n"));
464a658b32SHong Zhang   PetscCall(TSDestroy(&ts));
474a658b32SHong Zhang   PetscCall(VecDestroy(&X));
484a658b32SHong Zhang   PetscCall(PetscFinalize());
494a658b32SHong Zhang   return 0;
504a658b32SHong Zhang }
514a658b32SHong Zhang 
524a658b32SHong Zhang /*TEST
534a658b32SHong Zhang 
544a658b32SHong Zhang testset:
554a658b32SHong Zhang   test:
564a658b32SHong Zhang     suffix: 1
574a658b32SHong Zhang     args: -ts_monitor
584a658b32SHong Zhang   test:
594a658b32SHong Zhang     suffix: 2
60*e1db57b0SHong Zhang     requires: !single
61*e1db57b0SHong Zhang     args: -ts_monitor -ts_adapt_type none
624a658b32SHong Zhang TEST*/
63