> On Jun 11, 2020, at 2:47 PM, Amneet Bhalla <[email protected]> wrote:
>
> Ok, I'm able to call and use MATLAB functionality from PETSc. If I'm
> understanding correctly, when PetscMatlabEngineCreate() is called, a MATLAB
> workspace is created, that persists until PetscMatlabEngineDestroy() is
> called. PETSc can access/put/manipulate variables in this workspace, and can
> also call several MATLAB scripts and MATLAB functions, and subsequently
> access/manipulate new data created in the existing workspace. Is there
> something else that I should keep in mind to take advantage of Engine
> functionality or to avoid pitfalls. Also are there any limitations on MATLAB
> toolboxes that cannot be used via the Engine framework? I don't anticipate
> using any graphical interface functionality via MatlabEngine.
Yes this is all correct. It seems the Matlab engine is Matlab so it provides
all the functionality of standalone Matlab.
You can use Matlab graphics as usual if you run your program with the
additional option "-matlab_engine_graphics We just had it off by default
because sometimes Matlab Engine may have trouble access the users
graphics/window system but hopefully it won't be a problem
Barry
>
>
>
> On Tue, Jun 9, 2020 at 4:26 PM Barry Smith <[email protected]
> <mailto:[email protected]>> wrote:
>
> Great, yes you should not need the DYLIB paths
>
> The branch is off master but what you can do is copy the
> config/BuildSystem/config/MatlabEngine.py to your PETSc 3.12.2 version and
> the configure
> should work (it won't automatically run the test case but you can test it
> manually).
>
> Barry
>
>
>> On Jun 9, 2020, at 5:48 PM, Amneet Bhalla <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> That worked!
>>
>> amneetb@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 <[email protected]
>> <mailto:[email protected]>> 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
>>
>> <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 <[email protected]
>>> <mailto:[email protected]>> 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 <[email protected]
>>> <mailto:[email protected]>> 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 <[email protected]
>>>> <mailto:[email protected]>> 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 <[email protected]
>>>> <mailto:[email protected]>> 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@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
>>>> <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
>>>> <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
>>>> <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 <[email protected]
>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>> <mailto:[email protected]>> 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 <[email protected]
>>>>>> <mailto:[email protected]>> 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
>>
>>
>>
>
>
>
> --
> --Amneet
>
>
>