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 PetscMPIInt rank; 8 PetscInt n = 5; 9 char *output; 10 Vec x; 11 12 PetscFunctionBeginUser; 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\n %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\n %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