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 CHKERRQ(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,10,10,PETSC_DECIDE,PETSC_DECIDE,2,1,NULL,NULL,&da)); 42 CHKERRQ(DMSetFromOptions(da)); 43 CHKERRQ(DMSetUp(da)); 44 CHKERRQ(DMCreateGlobalVector(da,&global)); 45 CHKERRQ(DMCreateLocalVector(da,&local)); 46 CHKERRQ(VecSet(global,-1.0)); 47 CHKERRQ(DMGlobalToLocalBegin(da,global,INSERT_VALUES,local)); 48 CHKERRQ(DMGlobalToLocalEnd(da,global,INSERT_VALUES,local)); 49 CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 50 CHKERRQ(VecScale(local,rank+1)); 51 CHKERRQ(DMLocalToGlobalBegin(da,local,ADD_VALUES,global)); 52 CHKERRQ(DMLocalToGlobalEnd(da,local,ADD_VALUES,global)); 53 54 /* Create an empty bag */ 55 CHKERRQ(PetscBagCreate(PETSC_COMM_WORLD,sizeof(Parameter),&bag)); 56 CHKERRQ(PetscBagGetData(bag,(void**)¶ms)); 57 58 /* fill bag: register variables, defaults, names, help strings */ 59 CHKERRQ(PetscBagSetName(bag,"ParameterBag","contains problem parameters")); 60 CHKERRQ(PetscBagRegisterString(bag,¶ms->filename,PETSC_MAX_PATH_LEN,"output_file","filename","Name of secret file")); 61 CHKERRQ(PetscBagRegisterReal (bag,¶ms->ra,1.0,"param_1","The first parameter")); 62 CHKERRQ(PetscBagRegisterInt (bag,¶ms->ia,5,"param_2","The second parameter")); 63 CHKERRQ(PetscBagRegisterBool (bag,¶ms->ta,PETSC_TRUE,"do_output","Write output file (true/false)")); 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 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,params->filename,FILE_MODE_WRITE,&viewer)); 71 CHKERRQ(PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB)); 72 CHKERRQ(PetscBagView(bag,viewer)); 73 CHKERRQ(DMDASetFieldName(da,0,"field1")); 74 CHKERRQ(DMDASetFieldName(da,1,"field2")); 75 CHKERRQ(PetscObjectSetName((PetscObject)global,"da1")); 76 CHKERRQ(VecView(global,viewer)); 77 CHKERRQ(PetscViewerPopFormat(viewer)); 78 CHKERRQ(PetscViewerDestroy(&viewer)); 79 80 /* clean up and exit */ 81 CHKERRQ(PetscBagDestroy(&bag)); 82 CHKERRQ(DMDestroy(&da)); 83 CHKERRQ(VecDestroy(&local)); 84 CHKERRQ(VecDestroy(&global)); 85 ierr = PetscFinalize(); 86 return ierr; 87 } 88 89 /*TEST 90 91 test: 92 93 TEST*/ 94