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, NULL, 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: }