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 CHKERRQ(VecCreate(PETSC_COMM_WORLD,&x)); 17 CHKERRQ(VecSetSizes(x,PETSC_DECIDE,n)); 18 CHKERRQ(VecSetFromOptions(x)); 19 20 CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 21 CHKERRQ(PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD,&output)); 22 CHKERRQ(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"MPI_Comm_rank")); 23 CHKERRQ(PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]Processor rank is %s",rank,output)); 24 CHKERRQ(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT)); 25 26 CHKERRQ(PetscObjectSetName((PetscObject)x,"x")); 27 CHKERRQ(PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x)); 28 CHKERRQ(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"x = x + MPI_Comm_rank;\n")); 29 CHKERRQ(PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x)); 30 31 CHKERRQ(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"whos\n")); 32 CHKERRQ(PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]The result is %s",rank,output)); 33 CHKERRQ(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT)); 34 35 CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 36 CHKERRQ(VecDestroy(&x)); 37 ierr = PetscFinalize(); 38 return ierr; 39 } 40