1 static char help[] = "Demonstrates using PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB)\n\n"; 2 3 /*T 4 Concepts: viewers 5 Concepts: bags 6 Processors: n 7 T*/ 8 #include <petscsys.h> 9 #include <petscdm.h> 10 #include <petscdmda.h> 11 #include <petscbag.h> 12 13 typedef struct { 14 char filename[PETSC_MAX_PATH_LEN]; 15 PetscReal ra; 16 PetscInt ia; 17 PetscBool ta; 18 } Parameter; 19 20 int main(int argc,char **argv) 21 { 22 PetscErrorCode ierr; 23 PetscBag bag; 24 Parameter *params; 25 PetscViewer viewer; 26 DM da; 27 Vec global,local; 28 PetscMPIInt rank; 29 30 /* 31 Every PETSc routine should begin with the PetscInitialize() routine. 32 argc, argv - These command line arguments are taken to extract the options 33 supplied to PETSc and options supplied to MPI. 34 help - When PETSc executable is invoked with the option -help, 35 it prints the various options that can be applied at 36 runtime. The user can use the "help" variable place 37 additional help messages in this printout. 38 */ 39 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 40 /* Create a DMDA and an associated vector */ 41 ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,10,10,PETSC_DECIDE,PETSC_DECIDE,2,1,NULL,NULL,&da);CHKERRQ(ierr); 42 ierr = DMSetFromOptions(da);CHKERRQ(ierr); 43 ierr = DMSetUp(da);CHKERRQ(ierr); 44 ierr = DMCreateGlobalVector(da,&global);CHKERRQ(ierr); 45 ierr = DMCreateLocalVector(da,&local);CHKERRQ(ierr); 46 ierr = VecSet(global,-1.0);CHKERRQ(ierr); 47 ierr = DMGlobalToLocalBegin(da,global,INSERT_VALUES,local);CHKERRQ(ierr); 48 ierr = DMGlobalToLocalEnd(da,global,INSERT_VALUES,local);CHKERRQ(ierr); 49 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 50 ierr = VecScale(local,rank+1);CHKERRQ(ierr); 51 ierr = DMLocalToGlobalBegin(da,local,ADD_VALUES,global);CHKERRQ(ierr); 52 ierr = DMLocalToGlobalEnd(da,local,ADD_VALUES,global);CHKERRQ(ierr); 53 54 /* Create an empty bag */ 55 ierr = PetscBagCreate(PETSC_COMM_WORLD,sizeof(Parameter),&bag);CHKERRQ(ierr); 56 ierr = PetscBagGetData(bag,(void**)¶ms);CHKERRQ(ierr); 57 58 /* fill bag: register variables, defaults, names, help strings */ 59 ierr = PetscBagSetName(bag,"ParameterBag","contains problem parameters");CHKERRQ(ierr); 60 ierr = PetscBagRegisterString(bag,¶ms->filename,PETSC_MAX_PATH_LEN,"output_file","filename","Name of secret file");CHKERRQ(ierr); 61 ierr = PetscBagRegisterReal (bag,¶ms->ra,1.0,"param_1","The first parameter");CHKERRQ(ierr); 62 ierr = PetscBagRegisterInt (bag,¶ms->ia,5,"param_2","The second parameter");CHKERRQ(ierr); 63 ierr = PetscBagRegisterBool (bag,¶ms->ta,PETSC_TRUE,"do_output","Write output file (true/false)");CHKERRQ(ierr); 64 65 /* 66 Write output file with PETSC_VIEWER_BINARY_MATLAB format 67 NOTE: the output generated with this viewer can be loaded into 68 MATLAB using $PETSC_DIR/share/petsc/matlab/PetscReadBinaryMatlab.m 69 */ 70 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,params->filename,FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); 71 ierr = PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB);CHKERRQ(ierr); 72 ierr = PetscBagView(bag,viewer);CHKERRQ(ierr); 73 ierr = DMDASetFieldName(da,0,"field1");CHKERRQ(ierr); 74 ierr = DMDASetFieldName(da,1,"field2");CHKERRQ(ierr); 75 ierr = PetscObjectSetName((PetscObject)global,"da1");CHKERRQ(ierr); 76 ierr = VecView(global,viewer);CHKERRQ(ierr); 77 ierr = PetscViewerPopFormat(viewer);CHKERRQ(ierr); 78 ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); 79 80 /* clean up and exit */ 81 ierr = PetscBagDestroy(&bag);CHKERRQ(ierr); 82 ierr = DMDestroy(&da);CHKERRQ(ierr); 83 ierr = VecDestroy(&local);CHKERRQ(ierr); 84 ierr = VecDestroy(&global);CHKERRQ(ierr); 85 ierr = PetscFinalize(); 86 return ierr; 87 } 88 89 90 /*TEST 91 92 test: 93 94 TEST*/ 95