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