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