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