xref: /petsc/src/ts/trajectory/impls/singlefile/singlefile.c (revision af0996ce37bc06907c37d8d91773840993d61e62)
11c8c567eSBarry Smith 
2*af0996ceSBarry 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;
151c8c567eSBarry Smith   PetscReal               tprev;
161c8c567eSBarry Smith   PetscErrorCode          ierr;
171c8c567eSBarry Smith   const char              *filename;
181c8c567eSBarry Smith 
191c8c567eSBarry Smith   PetscFunctionBeginUser;
201c8c567eSBarry Smith   if (stepnum == 0) {
211c8c567eSBarry Smith     ierr = PetscViewerCreate(PETSC_COMM_WORLD, &sf->viewer);CHKERRQ(ierr);
221c8c567eSBarry Smith     ierr = PetscViewerSetType(sf->viewer, PETSCVIEWERBINARY);CHKERRQ(ierr);
231c8c567eSBarry Smith     ierr = PetscViewerFileSetMode(sf->viewer,FILE_MODE_WRITE);CHKERRQ(ierr);
241c8c567eSBarry Smith     ierr = PetscObjectGetName((PetscObject)jac,&filename);CHKERRQ(ierr);
251c8c567eSBarry Smith     ierr = PetscViewerFileSetName(sf->viewer, filename);CHKERRQ(ierr);
261c8c567eSBarry Smith   }
271c8c567eSBarry Smith   ierr = TSGetPrevTime(ts,&tprev);CHKERRQ(ierr);
281c8c567eSBarry Smith   ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr);
291c8c567eSBarry Smith   ierr = VecView(X,sf->viewer);CHKERRQ(ierr);
301c8c567eSBarry Smith   ierr = PetscViewerBinaryWrite(sf->viewer,&tprev,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr);
311c8c567eSBarry Smith   ierr = TSGetStages(ts,&ns,&Y);CHKERRQ(ierr);
321c8c567eSBarry Smith 
331c8c567eSBarry Smith   for (i=0;i<ns;i++) {
341c8c567eSBarry Smith     ierr = VecView(Y[i],sf->viewer);CHKERRQ(ierr);
351c8c567eSBarry Smith   }
361c8c567eSBarry Smith   PetscFunctionReturn(0);
371c8c567eSBarry Smith }
381c8c567eSBarry Smith 
391c8c567eSBarry Smith #undef __FUNCT__
401c8c567eSBarry Smith #define __FUNCT__ "TSTrajectoryDestroy_Singlefile"
411c8c567eSBarry Smith PetscErrorCode TSTrajectoryDestroy_Singlefile(TSTrajectory jac)
421c8c567eSBarry Smith {
431c8c567eSBarry Smith   PetscErrorCode          ierr;
441c8c567eSBarry Smith   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)jac->data;
451c8c567eSBarry Smith 
461c8c567eSBarry Smith   PetscFunctionBegin;
471c8c567eSBarry Smith   ierr = PetscViewerDestroy(&sf->viewer);CHKERRQ(ierr);
481c8c567eSBarry Smith   ierr = PetscFree(sf);CHKERRQ(ierr);
491c8c567eSBarry Smith   PetscFunctionReturn(0);
501c8c567eSBarry Smith }
511c8c567eSBarry Smith 
521c8c567eSBarry Smith /*MC
531c8c567eSBarry Smith       TSTRAJECTORYSINGLEFILE - Stores all solutions of the ODE/ADE into a single file
541c8c567eSBarry Smith 
551c8c567eSBarry Smith   Level: intermediate
561c8c567eSBarry Smith 
571c8c567eSBarry Smith .seealso:  TSTrajectoryCreate(), TS, TSTrajectorySetType()
581c8c567eSBarry Smith 
591c8c567eSBarry Smith M*/
601c8c567eSBarry Smith #undef __FUNCT__
611c8c567eSBarry Smith #define __FUNCT__ "TSTrajectoryCreate_Singlefile"
621c8c567eSBarry Smith PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory ts)
631c8c567eSBarry Smith {
641c8c567eSBarry Smith   PetscErrorCode          ierr;
651c8c567eSBarry Smith   TSTrajectory_Singlefile *sf;
661c8c567eSBarry Smith 
671c8c567eSBarry Smith   PetscFunctionBegin;
681c8c567eSBarry Smith   ierr = PetscNew(&sf);CHKERRQ(ierr);
691c8c567eSBarry Smith   ts->data         = sf;
701c8c567eSBarry Smith   ts->ops->set     = TSTrajectorySet_Singlefile;
711c8c567eSBarry Smith   ts->ops->get     = NULL;
721c8c567eSBarry Smith   ts->ops->destroy = TSTrajectoryDestroy_Singlefile;
731c8c567eSBarry Smith   PetscFunctionReturn(0);
741c8c567eSBarry Smith }
75