1 2 #include <petsc/private/tsimpl.h> /*I "petscts.h" I*/ 3 4 static PetscErrorCode OutputBIN(const char *filename,PetscViewer *viewer) 5 { 6 PetscErrorCode ierr; 7 8 PetscFunctionBegin; 9 ierr = PetscViewerCreate(PETSC_COMM_WORLD,viewer);CHKERRQ(ierr); 10 ierr = PetscViewerSetType(*viewer,PETSCVIEWERBINARY);CHKERRQ(ierr); 11 ierr = PetscViewerFileSetMode(*viewer,FILE_MODE_WRITE);CHKERRQ(ierr); 12 ierr = PetscViewerFileSetName(*viewer,filename);CHKERRQ(ierr); 13 PetscFunctionReturn(0); 14 } 15 16 static PetscErrorCode TSTrajectorySet_Visualization(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal time,Vec X) 17 { 18 PetscViewer viewer; 19 char filename[PETSC_MAX_PATH_LEN]; 20 PetscReal tprev; 21 PetscErrorCode ierr; 22 23 PetscFunctionBegin; 24 ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr); 25 if (stepnum == 0) { 26 PetscMPIInt rank; 27 ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)ts),&rank);CHKERRQ(ierr); 28 if (!rank) { 29 ierr = PetscRMTree("Visualization-data");CHKERRQ(ierr); 30 ierr = PetscMkdir("Visualization-data");CHKERRQ(ierr); 31 } 32 ierr = PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);CHKERRQ(ierr); 33 ierr = OutputBIN(filename,&viewer);CHKERRQ(ierr); 34 ierr = VecView(X,viewer);CHKERRQ(ierr); 35 ierr = PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 36 ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); 37 PetscFunctionReturn(0); 38 } 39 ierr = PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);CHKERRQ(ierr); 40 ierr = OutputBIN(filename,&viewer);CHKERRQ(ierr); 41 ierr = VecView(X,viewer);CHKERRQ(ierr); 42 ierr = PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 43 44 ierr = TSGetPrevTime(ts,&tprev);CHKERRQ(ierr); 45 ierr = PetscViewerBinaryWrite(viewer,&tprev,1,PETSC_REAL,PETSC_FALSE);CHKERRQ(ierr); 46 47 ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); 48 PetscFunctionReturn(0); 49 } 50 51 /*MC 52 TSTRAJECTORYVISUALIZATION - Stores each solution of the ODE/DAE in a file 53 54 Level: intermediate 55 56 .seealso: TSTrajectoryCreate(), TS, TSTrajectorySetType() 57 58 M*/ 59 PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory tj,TS ts) 60 { 61 PetscFunctionBegin; 62 tj->ops->set = TSTrajectorySet_Visualization; 63 PetscFunctionReturn(0); 64 } 65