xref: /petsc/src/vec/vec/tutorials/ex31.c (revision 53220ed8b007c7de27dea8e184db087efa47107f)
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   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