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 PetscBag bag; 23c4762a1bSJed Brown Parameter *params; 24c4762a1bSJed Brown PetscViewer viewer; 25c4762a1bSJed Brown DM da; 26c4762a1bSJed Brown Vec global,local; 27c4762a1bSJed Brown PetscMPIInt rank; 28c4762a1bSJed Brown 29c4762a1bSJed Brown /* 30c4762a1bSJed Brown Every PETSc routine should begin with the PetscInitialize() routine. 31c4762a1bSJed Brown argc, argv - These command line arguments are taken to extract the options 32c4762a1bSJed Brown supplied to PETSc and options supplied to MPI. 33c4762a1bSJed Brown help - When PETSc executable is invoked with the option -help, 34c4762a1bSJed Brown it prints the various options that can be applied at 35c4762a1bSJed Brown runtime. The user can use the "help" variable place 36c4762a1bSJed Brown additional help messages in this printout. 37c4762a1bSJed Brown */ 38*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc,&argv,(char*)0,help)); 39c4762a1bSJed Brown /* Create a DMDA and an associated vector */ 405f80ce2aSJacob 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)); 415f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(da)); 425f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(da)); 435f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateGlobalVector(da,&global)); 445f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLocalVector(da,&local)); 455f80ce2aSJacob Faibussowitsch CHKERRQ(VecSet(global,-1.0)); 465f80ce2aSJacob Faibussowitsch CHKERRQ(DMGlobalToLocalBegin(da,global,INSERT_VALUES,local)); 475f80ce2aSJacob Faibussowitsch CHKERRQ(DMGlobalToLocalEnd(da,global,INSERT_VALUES,local)); 485f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 495f80ce2aSJacob Faibussowitsch CHKERRQ(VecScale(local,rank+1)); 505f80ce2aSJacob Faibussowitsch CHKERRQ(DMLocalToGlobalBegin(da,local,ADD_VALUES,global)); 515f80ce2aSJacob Faibussowitsch CHKERRQ(DMLocalToGlobalEnd(da,local,ADD_VALUES,global)); 52c4762a1bSJed Brown 53c4762a1bSJed Brown /* Create an empty bag */ 545f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagCreate(PETSC_COMM_WORLD,sizeof(Parameter),&bag)); 555f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagGetData(bag,(void**)¶ms)); 56c4762a1bSJed Brown 57c4762a1bSJed Brown /* fill bag: register variables, defaults, names, help strings */ 585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagSetName(bag,"ParameterBag","contains problem parameters")); 595f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagRegisterString(bag,¶ms->filename,PETSC_MAX_PATH_LEN,"output_file","filename","Name of secret file")); 605f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagRegisterReal (bag,¶ms->ra,1.0,"param_1","The first parameter")); 615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagRegisterInt (bag,¶ms->ia,5,"param_2","The second parameter")); 625f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagRegisterBool (bag,¶ms->ta,PETSC_TRUE,"do_output","Write output file (true/false)")); 63c4762a1bSJed Brown 64c4762a1bSJed Brown /* 65c4762a1bSJed Brown Write output file with PETSC_VIEWER_BINARY_MATLAB format 66c4762a1bSJed Brown NOTE: the output generated with this viewer can be loaded into 67c4762a1bSJed Brown MATLAB using $PETSC_DIR/share/petsc/matlab/PetscReadBinaryMatlab.m 68c4762a1bSJed Brown */ 695f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,params->filename,FILE_MODE_WRITE,&viewer)); 705f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB)); 715f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagView(bag,viewer)); 725f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetFieldName(da,0,"field1")); 735f80ce2aSJacob Faibussowitsch CHKERRQ(DMDASetFieldName(da,1,"field2")); 745f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)global,"da1")); 755f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(global,viewer)); 765f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerPopFormat(viewer)); 775f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerDestroy(&viewer)); 78c4762a1bSJed Brown 79c4762a1bSJed Brown /* clean up and exit */ 805f80ce2aSJacob Faibussowitsch CHKERRQ(PetscBagDestroy(&bag)); 815f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&da)); 825f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&local)); 835f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&global)); 84*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 85*b122ec5aSJacob Faibussowitsch return 0; 86c4762a1bSJed Brown } 87c4762a1bSJed Brown 88c4762a1bSJed Brown /*TEST 89c4762a1bSJed Brown 90c4762a1bSJed Brown test: 91c4762a1bSJed Brown 92c4762a1bSJed Brown TEST*/ 93