Actual source code: trajvisualization.c

petsc-3.14.6 2021-03-30
Report Typos and Errors

  2: #include <petsc/private/tsimpl.h>

  4: static PetscErrorCode OutputBIN(MPI_Comm comm,const char *filename,PetscViewer *viewer)
  5: {

  9:   PetscViewerCreate(comm,viewer);
 10:   PetscViewerSetType(*viewer,PETSCVIEWERBINARY);
 11:   PetscViewerFileSetMode(*viewer,FILE_MODE_WRITE);
 12:   PetscViewerFileSetName(*viewer,filename);
 13:   return(0);
 14: }

 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;
 22:   MPI_Comm       comm;

 25:   PetscObjectGetComm((PetscObject)ts,&comm);
 26:   if (stepnum == 0) {
 27:     PetscMPIInt rank;
 28:     MPI_Comm_rank(comm,&rank);
 29:     if (!rank) {
 30:       PetscRMTree("Visualization-data");
 31:       PetscMkdir("Visualization-data");
 32:     }
 33:     if (tj->names) {
 34:       PetscViewer bnames;
 35:       PetscViewerBinaryOpen(comm,"Visualization-data/variablenames",FILE_MODE_WRITE,&bnames);
 36:       PetscViewerBinaryWriteStringArray(bnames,(const char *const *)tj->names);
 37:       PetscViewerDestroy(&bnames);
 38:     }
 39:     PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);
 40:     OutputBIN(comm,filename,&viewer);
 41:     if (!tj->transform) {
 42:       VecView(X,viewer);
 43:     } else {
 44:       Vec XX;
 45:       (*tj->transform)(tj->transformctx,X,&XX);
 46:       VecView(XX,viewer);
 47:       VecDestroy(&XX);
 48:     }
 49:     PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL);
 50:     PetscViewerDestroy(&viewer);
 51:     return(0);
 52:   }
 53:   PetscSNPrintf(filename,sizeof(filename),"Visualization-data/SA-%06d.bin",stepnum);
 54:   OutputBIN(comm,filename,&viewer);
 55:   if (!tj->transform) {
 56:     VecView(X,viewer);
 57:   } else {
 58:     Vec XX;
 59:     (*tj->transform)(tj->transformctx,X,&XX);
 60:     VecView(XX,viewer);
 61:     VecDestroy(&XX);
 62:   }
 63:   PetscViewerBinaryWrite(viewer,&time,1,PETSC_REAL);

 65:   TSGetPrevTime(ts,&tprev);
 66:   PetscViewerBinaryWrite(viewer,&tprev,1,PETSC_REAL);

 68:   PetscViewerDestroy(&viewer);
 69:   return(0);
 70: }

 72: /*MC
 73:       TSTRAJECTORYVISUALIZATION - Stores each solution of the ODE/DAE in a file

 75:       Saves each timestep into a separate file in Visualization-data/SA-%06d.bin

 77:       This version saves only the solutions at each timestep, it does not save the solution at each stage,
 78:       see TSTRAJECTORYBASIC that saves all stages

 80:       $PETSC_DIR/share/petsc/matlab/PetscReadBinaryTrajectory.m and $PETSC_DIR/lib/petsc/bin/PetscBinaryIOTrajectory.py
 81:       can read in files created with this format into MATLAB and Python.

 83:   Level: intermediate

 85: .seealso:  TSTrajectoryCreate(), TS, TSTrajectorySetType(), TSTrajectoryType, TSTrajectorySetVariableNames()

 87: M*/
 88: PETSC_EXTERN PetscErrorCode TSTrajectoryCreate_Visualization(TSTrajectory tj,TS ts)
 89: {
 91:   tj->ops->set    = TSTrajectorySet_Visualization;
 92:   tj->setupcalled = PETSC_TRUE;
 93:   return(0);
 94: }