1 static const char help[] = "Demonstrates PetscMatlabEngineXXX()\n";
2
3 #include <petscvec.h>
4 #include <petscmatlab.h>
5
main(int argc,char ** argv)6 int main(int argc, char **argv)
7 {
8 PetscMPIInt rank;
9 PetscInt n = 5;
10 const char *output;
11 Vec x;
12
13 PetscFunctionBeginUser;
14 PetscCall(PetscInitialize(&argc, &argv, NULL, 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\n %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\n %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