xref: /petsc/src/ts/trajectory/impls/singlefile/singlefile.c (revision af0996ce37bc06907c37d8d91773840993d61e62)
1 
2 #include <petsc/private/tsimpl.h>        /*I "petscts.h"  I*/
3 
4 typedef struct {
5   PetscViewer viewer;
6 } TSTrajectory_Singlefile;
7 
8 #undef __FUNCT__
9 #define __FUNCT__ "TSTrajectorySet_Singlefile"
10 PetscErrorCode TSTrajectorySet_Singlefile(TSTrajectory jac,TS ts,PetscInt stepnum,PetscReal time,Vec X)
11 {
12   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)jac->data;
13   PetscInt                ns,i;
14   Vec                     *Y;
15   PetscReal               tprev;
16   PetscErrorCode          ierr;
17   const char              *filename;
18 
19   PetscFunctionBeginUser;
20   if (stepnum == 0) {
21     ierr = PetscViewerCreate(PETSC_COMM_WORLD, &sf->viewer);CHKERRQ(ierr);
22     ierr = PetscViewerSetType(sf->viewer, PETSCVIEWERBINARY);CHKERRQ(ierr);
23     ierr = PetscViewerFileSetMode(sf->viewer,FILE_MODE_WRITE);CHKERRQ(ierr);
24     ierr = PetscObjectGetName((PetscObject)jac,&filename);CHKERRQ(ierr);
25     ierr = PetscViewerFileSetName(sf->viewer, filename);CHKERRQ(ierr);
26   }
27   ierr = TSGetPrevTime(ts,&tprev);CHKERRQ(ierr);
28   ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr);
29   ierr = VecView(X,sf->viewer);CHKERRQ(ierr);
30   ierr = PetscViewerBinaryWrite(sf->viewer,&tprev,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr);
31   ierr = TSGetStages(ts,&ns,&Y);CHKERRQ(ierr);
32 
33   for (i=0;i<ns;i++) {
34     ierr = VecView(Y[i],sf->viewer);CHKERRQ(ierr);
35   }
36   PetscFunctionReturn(0);
37 }
38 
39 #undef __FUNCT__
40 #define __FUNCT__ "TSTrajectoryDestroy_Singlefile"
41 PetscErrorCode TSTrajectoryDestroy_Singlefile(TSTrajectory jac)
42 {
43   PetscErrorCode          ierr;
44   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)jac->data;
45 
46   PetscFunctionBegin;
47   ierr = PetscViewerDestroy(&sf->viewer);CHKERRQ(ierr);
48   ierr = PetscFree(sf);CHKERRQ(ierr);
49   PetscFunctionReturn(0);
50 }
51 
52 /*MC
53       TSTRAJECTORYSINGLEFILE - Stores all solutions of the ODE/ADE into a single file
54 
55   Level: intermediate
56 
57 .seealso:  TSTrajectoryCreate(), TS, TSTrajectorySetType()
58 
59 M*/
60 #undef __FUNCT__
61 #define __FUNCT__ "TSTrajectoryCreate_Singlefile"
62 PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory ts)
63 {
64   PetscErrorCode          ierr;
65   TSTrajectory_Singlefile *sf;
66 
67   PetscFunctionBegin;
68   ierr = PetscNew(&sf);CHKERRQ(ierr);
69   ts->data         = sf;
70   ts->ops->set     = TSTrajectorySet_Singlefile;
71   ts->ops->get     = NULL;
72   ts->ops->destroy = TSTrajectoryDestroy_Singlefile;
73   PetscFunctionReturn(0);
74 }
75