Actual source code: singlefile.c


  2: #include <petsc/private/tsimpl.h>

  4: typedef struct {
  5:   PetscViewer viewer;
  6: } TSTrajectory_Singlefile;

  8: static PetscErrorCode TSTrajectorySet_Singlefile(TSTrajectory tj, TS ts, PetscInt stepnum, PetscReal time, Vec X)
  9: {
 10:   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile *)tj->data;
 11:   const char              *filename;

 13:   if (stepnum == 0) {
 14:     PetscViewerCreate(PetscObjectComm((PetscObject)X), &sf->viewer);
 15:     PetscViewerSetType(sf->viewer, PETSCVIEWERBINARY);
 16:     PetscViewerFileSetMode(sf->viewer, FILE_MODE_WRITE);
 17:     PetscObjectGetName((PetscObject)tj, &filename);
 18:     PetscViewerFileSetName(sf->viewer, filename);
 19:   }
 20:   VecView(X, sf->viewer);
 21:   PetscViewerBinaryWrite(sf->viewer, &time, 1, PETSC_REAL);
 22:   return 0;
 23: }

 25: static PetscErrorCode TSTrajectoryDestroy_Singlefile(TSTrajectory tj)
 26: {
 27:   TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile *)tj->data;

 29:   PetscViewerDestroy(&sf->viewer);
 30:   PetscFree(sf);
 31:   return 0;
 32: }

 34: /*MC
 35:       TSTRAJECTORYSINGLEFILE - Stores all solutions of the ODE/ADE into a single file followed by each timestep.
 36:       Does not save the intermediate stages in a multistage method

 38:   Level: intermediate

 40: .seealso: [](chapter_ts), `TSTrajectoryCreate()`, `TS`, `TSTrajectorySetType()`, `TSTrajectoryType`, `TSTrajectory`
 41: M*/
 42: PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory tj, TS ts)
 43: {
 44:   TSTrajectory_Singlefile *sf;

 46:   PetscNew(&sf);
 47:   tj->data         = sf;
 48:   tj->ops->set     = TSTrajectorySet_Singlefile;
 49:   tj->ops->get     = NULL;
 50:   tj->ops->destroy = TSTrajectoryDestroy_Singlefile;
 51:   ts->setupcalled  = PETSC_TRUE;
 52:   return 0;
 53: }