12b043167SHong Zhang 22b043167SHong Zhang #include <petsc/private/tsimpl.h> /*I "petscts.h" I*/ 32b043167SHong Zhang 42b043167SHong Zhang #undef __FUNCT__ 52b043167SHong Zhang #define __FUNCT__ "OutputBIN" 62b043167SHong Zhang static PetscErrorCode OutputBIN(const char *filename,PetscViewer *viewer) 72b043167SHong Zhang { 82b043167SHong Zhang PetscErrorCode ierr; 92b043167SHong Zhang 102b043167SHong Zhang PetscFunctionBegin; 112b043167SHong Zhang ierr = PetscViewerCreate(PETSC_COMM_WORLD,viewer);CHKERRQ(ierr); 122b043167SHong Zhang ierr = PetscViewerSetType(*viewer,PETSCVIEWERBINARY);CHKERRQ(ierr); 132b043167SHong Zhang ierr = PetscViewerFileSetMode(*viewer,FILE_MODE_WRITE);CHKERRQ(ierr); 142b043167SHong Zhang ierr = PetscViewerFileSetName(*viewer,filename);CHKERRQ(ierr); 152b043167SHong Zhang PetscFunctionReturn(0); 162b043167SHong Zhang } 172b043167SHong Zhang 182b043167SHong Zhang #undef __FUNCT__ 192b043167SHong Zhang #define __FUNCT__ "TSTrajectorySet_Visualization" 20*560360afSLisandro Dalcin static PetscErrorCode TSTrajectorySet_Visualization(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X) 212b043167SHong Zhang { 222b043167SHong Zhang PetscViewer viewer; 232b043167SHong Zhang char filename[PETSC_MAX_PATH_LEN]; 242b043167SHong Zhang PetscReal tprev; 252b043167SHong Zhang PetscErrorCode ierr; 262b043167SHong Zhang 272b043167SHong Zhang PetscFunctionBegin; 282b043167SHong Zhang ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr); 292b043167SHong Zhang if (stepnum == 0) { 302b043167SHong Zhang PetscMPIInt rank; 312b043167SHong Zhang ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)ts),&rank);CHKERRQ(ierr); 322b043167SHong Zhang if (!rank) { 332b043167SHong Zhang ierr = PetscRMTree("Visualization-data");CHKERRQ(ierr); 342b043167SHong Zhang ierr = PetscMkdir("Visualization-data");CHKERRQ(ierr); 352b043167SHong Zhang } 362b043167SHong Zhang ierr = PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);CHKERRQ(ierr); 372b043167SHong Zhang ierr = OutputBIN(filename,&viewer);CHKERRQ(ierr); 382b043167SHong Zhang ierr = VecView(X,viewer);CHKERRQ(ierr); 392b043167SHong Zhang ierr = PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 402b043167SHong Zhang ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); 412b043167SHong Zhang PetscFunctionReturn(0); 422b043167SHong Zhang } 432b043167SHong Zhang ierr = PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);CHKERRQ(ierr); 442b043167SHong Zhang ierr = OutputBIN(filename,&viewer);CHKERRQ(ierr); 452b043167SHong Zhang ierr = VecView(X,viewer);CHKERRQ(ierr); 462b043167SHong Zhang ierr = PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 472b043167SHong Zhang 482b043167SHong Zhang ierr = TSGetPrevTime(ts,&tprev);CHKERRQ(ierr); 492b043167SHong Zhang ierr = PetscViewerBinaryWrite(viewer,&tprev,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 502b043167SHong Zhang 512b043167SHong Zhang ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); 522b043167SHong Zhang PetscFunctionReturn(0); 532b043167SHong Zhang } 542b043167SHong Zhang 552b043167SHong Zhang /*MC 565c9db295SHong Zhang TSTRAJECTORYVISUALIZATION - Stores each solution of the ODE/DAE in a file 572b043167SHong Zhang 582b043167SHong Zhang Level: intermediate 592b043167SHong Zhang 602b043167SHong Zhang .seealso: TSTrajectoryCreate(), TS, TSTrajectorySetType() 612b043167SHong Zhang 622b043167SHong Zhang M*/ 632b043167SHong Zhang #undef __FUNCT__ 642b043167SHong Zhang #define __FUNCT__ "TSTrajectoryCreate_Visualization" 652b043167SHong Zhang PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory tj,TS ts) 662b043167SHong Zhang { 672b043167SHong Zhang PetscFunctionBegin; 682b043167SHong Zhang tj->ops->set = TSTrajectorySet_Visualization; 692b043167SHong Zhang PetscFunctionReturn(0); 702b043167SHong Zhang } 71