[petsc-users] Calling MATLAB code within a parallel C/C++ code

Barry Smith bsmith at petsc.dev
Mon Jun 8 20:39:13 CDT 2020


  Looks like the tool to list the examples in the manual pages is broken since it didn't find these other examples, I'll take a look at it.

  There is also a discussion in the users manual

$ git grep MatlabEngine | grep ex
src/docs/tex/manual/part2.tex:PetscMatlabEngineCreate(MPI_Comm comm,char *machine,PetscMatlabEngine *e);
src/docs/tex/manual/part2.tex:PetscMatlabEnginePut(PetscMatlabEngine e,PetscObject obj);
src/docs/tex/manual/part2.tex:PetscMatlabEngineGet(PetscMatlabEngine e,PetscObject obj);
src/docs/tex/manual/part2.tex:PetscMatlabEnginePutArray(PetscMatlabEngine e,int m,int n,PetscScalar *array,char *name);
src/docs/tex/manual/part2.tex:PetscMatlabEngineGetArray(PetscMatlabEngine e,int m,int n,PetscScalar *array,char *name);
src/docs/tex/manual/part2.tex:PetscMatlabEngineEvaluate(PetscMatlabEngine,"format",...);
src/docs/tex/manual/part2.tex:PetscMatlabEngineEvaluate(PetscMatlabEngine,"x = \%g *y + z;",avalue);
src/docs/tex/manual/part2.tex:PetscMatlabEngineGetOutput(PetscMatlabEngine,char **);
src/docs/tex/manual/part2.tex:PetscMatlabEnginedPrintOutput(PetscMatlabEngine,FILE*).
src/snes/tutorials/ex5.c:  ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(comm),(PetscObject)localX);CHKERRQ(ierr);
src/snes/tutorials/ex5.c:  ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(comm),"localF=ex5m(localX,%18.16e,%18.16e,%18.16e)",hx,hy,lambda);CHKERRQ(ierr);
src/snes/tutorials/ex5.c:  ierr = PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_(comm),(PetscObject)localF);CHKERRQ(ierr);
src/sys/tests/ex16.c:static char help[] = "Demonstrates PetscMatlabEngineXXX()\n";
src/sys/tests/ex16.c:  ierr = PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),&output);CHKERRQ(ierr);
src/sys/tests/ex16.c:  ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),"MPI_Comm_rank");CHKERRQ(ierr);
src/sys/tests/ex16.c:    ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),user);CHKERRQ(ierr);
src/vec/vec/tests/ex31.c:static const char help[] = "Demonstrates PetscMatlabEngineXXX()\n";
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD,&output);
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"MPI_Comm_rank");
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr);
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"x = x + MPI_Comm_rank;\n");
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr);
src/vec/vec/tests/ex31.c:  ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"whos\n");CHKERRQ(ierr);

> On Jun 8, 2020, at 8:26 PM, Amneet Bhalla <mail2amneet at gmail.com> wrote:
> 
> Great!
> 
> Clicking on some of the functions pointed me to this example
> https://www.mcs.anl.gov/petsc/petsc-3.13/src/snes/tutorials/ex5.c.html <https://www.mcs.anl.gov/petsc/petsc-3.13/src/snes/tutorials/ex5.c.html>
> 
> Are there more examples, which are perhaps simpler than the above, which I can refer to? 
> 
> On Mon, Jun 8, 2020 at 5:51 PM Barry Smith <bsmith at petsc.dev <mailto:bsmith at petsc.dev>> wrote:
> 
>   You should use the PetscMatlabEngine https://www.mcs.anl.gov/petsc/petsc-3.13/docs/manualpages/Sys/PetscMatlabEngine.html <https://www.mcs.anl.gov/petsc/petsc-3.13/docs/manualpages/Sys/PetscMatlabEngine.html>
> 
>   Barry
> 
> 
>> On Jun 8, 2020, at 7:09 PM, Amneet Bhalla <mail2amneet at gmail.com <mailto:mail2amneet at gmail.com>> wrote:
>> 
>> Hi Folks,
>> 
>> My parallel application written in C++ (which also uses PETSc library for linear solvers) requires calling control and optimization toolbox of MATLAB at every time step to get a small number of double values. Likewise the MATLAB function will need to know some values from the parallel C++ application to return those doubles. I'm wondering if there is a recommended way of calling MATLAB from parallel C/C++/Fortran codes, and if PETSc has some interface that could be leveraged for this exchange. 
>> 
>> Thanks,
>> -- 
>> --Amneet 
>> 
>> 
>> 
> 
> 
> 
> -- 
> --Amneet 
> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200608/5a3b4254/attachment-0001.html>


More information about the petsc-users mailing list