1 static const char help[] = "Demonstrates PetscMatlabEngineXXX()\n"; 2 3 #include <petscvec.h> 4 #include <petscmatlab.h> 5 6 int main(int argc,char **argv) 7 { 8 PetscErrorCode ierr; 9 PetscMPIInt rank; 10 PetscInt n = 5; 11 char *output; 12 Vec x; 13 14 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 15 16 ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr); 17 ierr = VecSetSizes(x,PETSC_DECIDE,n);CHKERRQ(ierr); 18 ierr = VecSetFromOptions(x);CHKERRQ(ierr); 19 20 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); 21 ierr = PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD,&output);CHKERRQ(ierr); 22 ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"MPI_Comm_rank");CHKERRQ(ierr); 23 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]Processor rank is %s",rank,output);CHKERRQ(ierr); 24 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);CHKERRQ(ierr); 25 26 ierr = PetscObjectSetName((PetscObject)x,"x");CHKERRQ(ierr); 27 ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr); 28 ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"x = x + MPI_Comm_rank;\n");CHKERRQ(ierr); 29 ierr = PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr); 30 31 ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"whos\n");CHKERRQ(ierr); 32 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]The result is %s",rank,output);CHKERRQ(ierr); 33 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT);CHKERRQ(ierr); 34 35 ierr = VecView(x,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 36 ierr = VecDestroy(&x);CHKERRQ(ierr); 37 ierr = PetscFinalize(); 38 return ierr; 39 } 40 41