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