xref: /petsc/src/ts/trajectory/impls/visualization/trajvisualization.c (revision 77c41173392bd7439cd305509bed151575a10bf0)
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