Actual source code: ex31.c

  1: static const char help[] = "Demonstrates PetscMatlabEngineXXX()\n";

  3: #include <petscvec.h>
  4: #include <petscmatlab.h>

  6: int main(int argc, char **argv)
  7: {
  8:   PetscMPIInt rank;
  9:   PetscInt    n = 5;
 10:   char       *output;
 11:   Vec         x;

 14:   PetscInitialize(&argc, &argv, (char *)0, help);

 16:   VecCreate(PETSC_COMM_WORLD, &x);
 17:   VecSetSizes(x, PETSC_DECIDE, n);
 18:   VecSetFromOptions(x);

 20:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
 21:   PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD, &output);
 22:   PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD, "MPI_Comm_rank");
 23:   PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d]Processor rank is\n %s", rank, output);
 24:   PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT);

 26:   PetscObjectSetName((PetscObject)x, "x");
 27:   PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD, (PetscObject)x);
 28:   PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD, "x = x + MPI_Comm_rank;\n");
 29:   PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD, (PetscObject)x);

 31:   PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD, "whos\n");
 32:   PetscSynchronizedPrintf(PETSC_COMM_WORLD, "[%d]The result is\n %s", rank, output);
 33:   PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT);

 35:   VecView(x, PETSC_VIEWER_STDOUT_WORLD);
 36:   VecDestroy(&x);
 37:   PetscFinalize();
 38:   return 0;
 39: }