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