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 8560360afSLisandro Dalcin static PetscErrorCode TSTrajectorySet_Singlefile(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X) 91c8c567eSBarry Smith { 10972caf09SHong Zhang TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)tj->data; 111c8c567eSBarry Smith const char *filename; 121c8c567eSBarry Smith 1384e977c4SHong Zhang PetscFunctionBegin; 141c8c567eSBarry Smith if (stepnum == 0) { 159566063dSJacob Faibussowitsch PetscCall(PetscViewerCreate(PetscObjectComm((PetscObject)X),&sf->viewer)); 169566063dSJacob Faibussowitsch PetscCall(PetscViewerSetType(sf->viewer,PETSCVIEWERBINARY)); 179566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetMode(sf->viewer,FILE_MODE_WRITE)); 189566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)tj,&filename)); 199566063dSJacob Faibussowitsch PetscCall(PetscViewerFileSetName(sf->viewer,filename)); 201c8c567eSBarry Smith } 219566063dSJacob Faibussowitsch PetscCall(VecView(X,sf->viewer)); 229566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryWrite(sf->viewer,&time,1,PETSC_REAL)); 231c8c567eSBarry Smith PetscFunctionReturn(0); 241c8c567eSBarry Smith } 251c8c567eSBarry Smith 26560360afSLisandro Dalcin static PetscErrorCode TSTrajectoryDestroy_Singlefile(TSTrajectory tj) 271c8c567eSBarry Smith { 28972caf09SHong Zhang TSTrajectory_Singlefile *sf = (TSTrajectory_Singlefile*)tj->data; 291c8c567eSBarry Smith 301c8c567eSBarry Smith PetscFunctionBegin; 319566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&sf->viewer)); 329566063dSJacob Faibussowitsch PetscCall(PetscFree(sf)); 331c8c567eSBarry Smith PetscFunctionReturn(0); 341c8c567eSBarry Smith } 351c8c567eSBarry Smith 361c8c567eSBarry Smith /*MC 378868bf69SBarry Smith TSTRAJECTORYSINGLEFILE - Stores all solutions of the ODE/ADE into a single file followed by each timestep. Does not save the intermediate stages in a multistage method 381c8c567eSBarry Smith 391c8c567eSBarry Smith Level: intermediate 401c8c567eSBarry Smith 41*db781477SPatrick Sanan .seealso: `TSTrajectoryCreate()`, `TS`, `TSTrajectorySetType()` 421c8c567eSBarry Smith 431c8c567eSBarry Smith M*/ 44972caf09SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Singlefile(TSTrajectory tj,TS ts) 451c8c567eSBarry Smith { 461c8c567eSBarry Smith TSTrajectory_Singlefile *sf; 471c8c567eSBarry Smith 481c8c567eSBarry Smith PetscFunctionBegin; 499566063dSJacob Faibussowitsch PetscCall(PetscNew(&sf)); 50972caf09SHong Zhang tj->data = sf; 51972caf09SHong Zhang tj->ops->set = TSTrajectorySet_Singlefile; 52972caf09SHong Zhang tj->ops->get = NULL; 53972caf09SHong Zhang tj->ops->destroy = TSTrajectoryDestroy_Singlefile; 541aebe4aeSStefano Zampini ts->setupcalled = PETSC_TRUE; 551c8c567eSBarry Smith PetscFunctionReturn(0); 561c8c567eSBarry Smith } 57