xref: /petsc/src/ts/trajectory/impls/singlefile/singlefile.c (revision c679fc159613899257481216ee0bdd632d9c1050)
11c8c567eSBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/tsimpl.h>        /*I "petscts.h"  I*/
31c8c567eSBarry Smith 
41c8c567eSBarry Smith typedef struct {
51c8c567eSBarry Smith   PetscViewer viewer;
61c8c567eSBarry Smith } TSTrajectory_Singlefile;
71c8c567eSBarry Smith 
81c8c567eSBarry Smith #undef __FUNCT__
91c8c567eSBarry Smith #define __FUNCT__ "TSTrajectorySet_Singlefile"
101c8c567eSBarry Smith PetscErrorCode TSTrajectorySet_Singlefile(TSTrajectory jac,TS ts,PetscInt stepnum,PetscReal time,Vec X)
111c8c567eSBarry Smith {
121c8c567eSBarry Smith   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)jac->data;
131c8c567eSBarry Smith   PetscInt                ns,i;
141c8c567eSBarry Smith   Vec                     *Y;
15*c679fc15SHong Zhang   /* tprev is only needed for the adjoint run */
16*c679fc15SHong Zhang   /*
171c8c567eSBarry Smith   PetscReal               tprev;
18*c679fc15SHong Zhang    */
191c8c567eSBarry Smith   PetscErrorCode          ierr;
201c8c567eSBarry Smith   const char              *filename;
211c8c567eSBarry Smith 
221c8c567eSBarry Smith   PetscFunctionBeginUser;
231c8c567eSBarry Smith   if (stepnum == 0) {
241c8c567eSBarry Smith     ierr = PetscViewerCreate(PETSC_COMM_WORLD, &sf->viewer);CHKERRQ(ierr);
251c8c567eSBarry Smith     ierr = PetscViewerSetType(sf->viewer, PETSCVIEWERBINARY);CHKERRQ(ierr);
261c8c567eSBarry Smith     ierr = PetscViewerFileSetMode(sf->viewer,FILE_MODE_WRITE);CHKERRQ(ierr);
271c8c567eSBarry Smith     ierr = PetscObjectGetName((PetscObject)jac,&filename);CHKERRQ(ierr);
281c8c567eSBarry Smith     ierr = PetscViewerFileSetName(sf->viewer, filename);CHKERRQ(ierr);
291c8c567eSBarry Smith   }
301c8c567eSBarry Smith   ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr);
311c8c567eSBarry Smith 
32*c679fc15SHong Zhang   ierr = VecView(X,sf->viewer);CHKERRQ(ierr);
33*c679fc15SHong Zhang 
34*c679fc15SHong Zhang   ierr = PetscViewerBinaryWrite(sf->viewer,&time,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr);
35*c679fc15SHong Zhang 
36*c679fc15SHong Zhang   ierr = TSGetStages(ts,&ns,&Y);CHKERRQ(ierr);
371c8c567eSBarry Smith   for (i=0;i<ns;i++) {
381c8c567eSBarry Smith     ierr = VecView(Y[i],sf->viewer);CHKERRQ(ierr);
391c8c567eSBarry Smith   }
40*c679fc15SHong Zhang 
41*c679fc15SHong Zhang   /* tprev is only needed for the adjoint run */
42*c679fc15SHong Zhang   /*
43*c679fc15SHong Zhang   ierr = TSGetPrevTime(ts,&tprev);CHKERRQ(ierr);
44*c679fc15SHong Zhang   ierr = PetscViewerBinaryWrite(sf->viewer,&tprev,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr);
45*c679fc15SHong Zhang   */
461c8c567eSBarry Smith   PetscFunctionReturn(0);
471c8c567eSBarry Smith }
481c8c567eSBarry Smith 
491c8c567eSBarry Smith #undef __FUNCT__
501c8c567eSBarry Smith #define __FUNCT__ "TSTrajectoryDestroy_Singlefile"
511c8c567eSBarry Smith PetscErrorCode TSTrajectoryDestroy_Singlefile(TSTrajectory jac)
521c8c567eSBarry Smith {
531c8c567eSBarry Smith   PetscErrorCode          ierr;
541c8c567eSBarry Smith   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)jac->data;
551c8c567eSBarry Smith 
561c8c567eSBarry Smith   PetscFunctionBegin;
571c8c567eSBarry Smith   ierr = PetscViewerDestroy(&sf->viewer);CHKERRQ(ierr);
581c8c567eSBarry Smith   ierr = PetscFree(sf);CHKERRQ(ierr);
591c8c567eSBarry Smith   PetscFunctionReturn(0);
601c8c567eSBarry Smith }
611c8c567eSBarry Smith 
621c8c567eSBarry Smith /*MC
631c8c567eSBarry Smith       TSTRAJECTORYSINGLEFILE - Stores all solutions of the ODE/ADE into a single file
641c8c567eSBarry Smith 
651c8c567eSBarry Smith   Level: intermediate
661c8c567eSBarry Smith 
671c8c567eSBarry Smith .seealso:  TSTrajectoryCreate(), TS, TSTrajectorySetType()
681c8c567eSBarry Smith 
691c8c567eSBarry Smith M*/
701c8c567eSBarry Smith #undef __FUNCT__
711c8c567eSBarry Smith #define __FUNCT__ "TSTrajectoryCreate_Singlefile"
721c8c567eSBarry Smith PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory ts)
731c8c567eSBarry Smith {
741c8c567eSBarry Smith   PetscErrorCode          ierr;
751c8c567eSBarry Smith   TSTrajectory_Singlefile *sf;
761c8c567eSBarry Smith 
771c8c567eSBarry Smith   PetscFunctionBegin;
781c8c567eSBarry Smith   ierr = PetscNew(&sf);CHKERRQ(ierr);
791c8c567eSBarry Smith   ts->data         = sf;
801c8c567eSBarry Smith   ts->ops->set     = TSTrajectorySet_Singlefile;
811c8c567eSBarry Smith   ts->ops->get     = NULL;
821c8c567eSBarry Smith   ts->ops->destroy = TSTrajectoryDestroy_Singlefile;
831c8c567eSBarry Smith   PetscFunctionReturn(0);
841c8c567eSBarry Smith }
85