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