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