Actual source code: ex16.c
1: static char help[] = "Demonstrates PetscMatlabEngineXXX()\n";
3: #include <petscsys.h>
4: #include <petscmatlab.h>
6: int main(int argc, char **argv)
7: {
8: PetscMPIInt rank;
9: char buffer[256], *output, user[256];
10: PetscBool userhappy = PETSC_FALSE;
12: PetscFunctionBeginUser;
13: PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
14: PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
16: PetscCall(PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD), &output));
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: }