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

Amneet Bhalla mail2amneet at gmail.com
Tue Jun 9 17:48:47 CDT 2020


That worked!

amneetb at Amneets-MBP:~/Softwares/PETSc-Gitlab/petsc-matlab$ make
PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/petsc-matlab
PETSC_ARCH=darwin-dbg check

Running check examples to verify correct installation

Using PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/petsc-matlab and
PETSC_ARCH=darwin-dbg

C/C++ example src/snes/tutorials/ex19 run successfully with 1 MPI process

C/C++ example src/snes/tutorials/ex19 run successfully with 2 MPI processes

C/C++ example src/snes/tutorials/ex19 run successfully with hypre

Fortran example src/snes/tutorials/ex5f run successfully with 1 MPI process

C/C++ example src/vec/vec/tutorials/ex31 run successfully with Matlab engine

Completed test examples

Should I remove DYLIB paths from .profile since these are now baked in the
linker?

Also, Is this branch based-off of latest master? I'm currently using PETSc
v3.12.2 for IBAMR. Anything close to this version should work for me.


On Tue, Jun 9, 2020 at 3:17 PM Barry Smith <bsmith at petsc.dev> wrote:

>
>    I tried including the directories into my DYLD environmental variables
> and it didn't work; I am not sure why. This might be why
> https://stackoverflow.com/questions/35568122/why-isnt-dyld-library-path-being-propagated-here
>
>    Anyways try my branch and that should work.
>
>    Barry
>
>
>
> On Jun 9, 2020, at 5:09 PM, Amneet Bhalla <mail2amneet at gmail.com> wrote:
>
>
> That's where I also found it. Thanks, Sanjay!
>
> (This path is included in my .profile file
>
> export DYLD_FALLBACK_LIBRARY_PATH=
> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
> $DYLD_FALLBACK_LIBRARY_PATH
>
> export DYLD_LIBRARY_PATH=
> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
> $DYLD_LIBRARY_PATH
>
>
>
> )
>
> Do I need to tell PETSc about this path as well? Something like:
>
>
> --with-matlab-engine-lib=/Applications/MATLAB_R2019b.app/bin/maci64/libeng.dylib
>
>
> On Tue, Jun 9, 2020 at 2:56 PM Sanjay Govindjee <s_g at berkeley.edu> wrote:
>
>> Try looking in:
>>
>> $(MLROOT)/bin/maci64
>>
>> where MLROOT = /Applications/MATLAB_R2019a.app or the like
>>
>>
>>
>> On 6/9/20 2:51 PM, Junchao Zhang wrote:
>>
>> Find recursively where is libeng.dylib under
>> /Applications/MATLAB_R2019b.app/extern/engines/
>>
>> --Junchao Zhang
>>
>>
>> On Tue, Jun 9, 2020 at 4:27 PM Amneet Bhalla <mail2amneet at gmail.com>
>> wrote:
>>
>>> Forgot to mention that configure found the following about MATLAB
>>>
>>> Matlab:
>>>   Includes: -I/Applications/MATLAB_R2019b.app/extern/include
>>>   /Applications/MATLAB_R2019b.app
>>> MatlabEngine:
>>>   Library:  -L/Applications/MATLAB_R2019b.app/bin/maci64
>>> -L/Applications/MATLAB_R2019b.app/extern/lib/maci64 -leng -lmex -lmx -lmat
>>> -lut -licudata -licui18n -licuuc
>>>
>>> On Tue, Jun 9, 2020 at 2:20 PM Amneet Bhalla <mail2amneet at gmail.com>
>>> wrote:
>>>
>>>> Do these additional configure flags for MATLAB look OK?
>>>>
>>>> --with-matlab=1 --with-matlab-dir=/Applications/MATLAB_R2019b.app
>>>> --with-matlab-engine=1
>>>> --with-matlab-engine-dir=/Applications/MATLAB_R2019b.app/extern/engines/
>>>>
>>>>
>>>>
>>>> With this configuration make compiled files like:
>>>>
>>>>           CC darwin-dbg/obj/sys/classes/viewer/impls/matlab/vmatlab.o
>>>>           CC
>>>> darwin-dbg/obj/sys/classes/viewer/impls/matlab/ftn-custom/zvmatlabf.o
>>>>           CC darwin-dbg/obj/sys/classes/matlabengine/matlab.o
>>>>           CC darwin-dbg/obj/sys/classes/matlabengine/ftn-auto/matlabf.o
>>>>           CC
>>>> darwin-dbg/obj/sys/classes/matlabengine/ftn-custom/zmatlabf.o
>>>>           CC darwin-dbg/obj/vec/pf/impls/matlab/cmatlab.o
>>>>           CC darwin-dbg/obj/vec/vec/utils/matlab/gcreatev.o
>>>>
>>>> make[2]: Leaving directory `/Users/amneetb/Softwares/PETSc-Gitlab/PETSc'
>>>> BEGINNING TO COMPILE MATLAB INTERFACE
>>>> Building with 'Xcode with Clang'.
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> MEX completed successfully.
>>>> Building with 'Xcode with Clang'.
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> MEX completed successfully.
>>>> Building with 'Xcode with Clang'.
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> MEX completed successfully.
>>>> Building with 'Xcode with Clang'.
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>> from c_mexapi_version.o
>>>>
>>>> MEX completed successfully.
>>>>
>>>>
>>>> However, make check gives error
>>>>
>>>> amneetb at Amneets-MBP:~/Softwares/PETSc-Gitlab/PETSc$ make
>>>> PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/PETSc PETSC_ARCH=darwin-dbg
>>>> check
>>>> Running test examples to verify correct installation
>>>> Using PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/PETSc and
>>>> PETSC_ARCH=darwin-dbg
>>>> Possible error running C/C++ src/snes/examples/tutorials/ex19 with 1
>>>> MPI process
>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>   Reason: image not found
>>>>
>>>>
>>>> ===================================================================================
>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>> =   PID 14057 RUNNING AT Amneets-MBP
>>>> =   EXIT CODE: 6
>>>> =   CLEANING UP REMAINING PROCESSES
>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>
>>>> ===================================================================================
>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6 (signal
>>>> 6)
>>>> This typically refers to a problem with your application.
>>>> Please see the FAQ page for debugging suggestions
>>>> Possible error running C/C++ src/snes/examples/tutorials/ex19 with 2
>>>> MPI processes
>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>   Reason: image not found
>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>   Reason: image not found
>>>>
>>>>
>>>> ===================================================================================
>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>> =   PID 14062 RUNNING AT Amneets-MBP
>>>> =   EXIT CODE: 6
>>>> =   CLEANING UP REMAINING PROCESSES
>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>
>>>> ===================================================================================
>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6 (signal
>>>> 6)
>>>> This typically refers to a problem with your application.
>>>> Please see the FAQ page for debugging suggestions
>>>> 1,5c1,17
>>>> < lid velocity = 0.0016, prandtl # = 1., grashof # = 1.
>>>> <   0 SNES Function norm 0.0406612
>>>> <   1 SNES Function norm 4.12227e-06
>>>> <   2 SNES Function norm 6.098e-11
>>>> < Number of SNES iterations = 2
>>>> ---
>>>> > dyld: Library not loaded: @rpath/libeng.dylib
>>>> >   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>> >   Reason: image not found
>>>> > dyld: Library not loaded: @rpath/libeng.dylib
>>>> >   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>> >   Reason: image not found
>>>> >
>>>> >
>>>> ===================================================================================
>>>> > =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>> > =   PID 14072 RUNNING AT Amneets-MBP
>>>> > =   EXIT CODE: 6
>>>> > =   CLEANING UP REMAINING PROCESSES
>>>> > =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>> >
>>>> ===================================================================================
>>>> > YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6
>>>> (signal 6)
>>>> > This typically refers to a problem with your application.
>>>> > Please see the FAQ page for debugging suggestions
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials
>>>> Possible problem with ex19 running with hypre, diffs above
>>>> =========================================
>>>> Possible error running Fortran example src/snes/examples/tutorials/ex5f
>>>> with 1 MPI process
>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>   Referenced from:
>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex5f
>>>>   Reason: image not found
>>>>
>>>>
>>>> ===================================================================================
>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>> =   PID 14211 RUNNING AT Amneets-MBP
>>>> =   EXIT CODE: 6
>>>> =   CLEANING UP REMAINING PROCESSES
>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>
>>>> ===================================================================================
>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6 (signal
>>>> 6)
>>>> This typically refers to a problem with your application.
>>>> Please see the FAQ page for debugging suggestions
>>>> Completed test examples
>>>>
>>>>
>>>> I have added the following paths in my .profile and sourced it before
>>>> make all and make check
>>>>
>>>> export DYLD_FALLBACK_LIBRARY_PATH=
>>>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>>>> $DYLD_FALLBACK_LIBRARY_PATH
>>>>
>>>> export DYLD_LIBRARY_PATH=
>>>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>>>> $DYLD_LIBRARY_PATH
>>>>
>>>>
>>>>
>>>> On Mon, Jun 8, 2020 at 6:39 PM Barry Smith <bsmith at petsc.dev> wrote:
>>>>
>>>>>
>>>>>   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
>>>>>
>>>>> 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> wrote:
>>>>>
>>>>>>
>>>>>>   You should use the PetscMatlabEngine
>>>>>> 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>
>>>>>> 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
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> --Amneet
>>>>
>>>>
>>>>
>>>>
>>>
>>> --
>>> --Amneet
>>>
>>>
>>>
>>>
>>
>
> --
> --Amneet
>
>
>
>
>

-- 
--Amneet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200609/69e5c29b/attachment-0001.html>


More information about the petsc-users mailing list