xref: /petsc/src/vec/vec/tutorials/ex31.c (revision 327415f76d85372a4417cf1aaa14db707d4d6c04)
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   PetscFunctionBeginUser;
14   PetscCall(PetscInitialize(&argc,&argv,(char*)0,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 %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 %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