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 PetscMPIInt rank; 9 PetscInt n = 5; 10 char *output; 11 Vec x; 12 13 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 14 15 PetscCall(VecCreate(PETSC_COMM_WORLD,&x)); 16 PetscCall(VecSetSizes(x,PETSC_DECIDE,n)); 17 PetscCall(VecSetFromOptions(x)); 18 19 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 20 PetscCall(PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD,&output)); 21 PetscCall(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"MPI_Comm_rank")); 22 PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]Processor rank is %s",rank,output)); 23 PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT)); 24 25 PetscCall(PetscObjectSetName((PetscObject)x,"x")); 26 PetscCall(PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x)); 27 PetscCall(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"x = x + MPI_Comm_rank;\n")); 28 PetscCall(PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x)); 29 30 PetscCall(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"whos\n")); 31 PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD,"[%d]The result is %s",rank,output)); 32 PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT)); 33 34 PetscCall(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 35 PetscCall(VecDestroy(&x)); 36 PetscCall(PetscFinalize()); 37 return 0; 38 } 39