1 static char help[] = "Demonstrates PetscMatlabEngineXXX()\n";
2
3 #include <petscsys.h>
4 #include <petscmatlab.h>
5
main(int argc,char ** argv)6 int main(int argc, char **argv)
7 {
8 PetscMPIInt rank;
9 char buffer[256], *output, user[256];
10 PetscBool userhappy = PETSC_FALSE;
11
12 PetscFunctionBeginUser;
13 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
14 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
15
16 PetscCall(PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD), &output));
17
18 PetscCall(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD), "MPI_Comm_rank"));
19 PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d]Processor rank is %s", rank, output));
20 PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT));
21 PetscCall(PetscPrintf(PETSC_COMM_WORLD, ">>"));
22 PetscCall(PetscSynchronizedFGets(PETSC_COMM_WORLD, stdin, 256, user));
23 PetscCall(PetscStrncmp(user, "exit", 4, &userhappy));
24 while (!userhappy) {
25 PetscCall(PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD), user));
26 PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d]The result is %s", rank, output));
27 PetscCall(PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT));
28 PetscCall(PetscPrintf(PETSC_COMM_WORLD, ">>"));
29 PetscCall(PetscSynchronizedFGets(PETSC_COMM_WORLD, stdin, 256, user));
30 PetscCall(PetscStrncmp(user, "exit", 4, &userhappy));
31 }
32 PetscCall(PetscFinalize());
33 return 0;
34 }
35