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