Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port MATLAB bindings to new interface introduced in MATLAB R2019a #2

Open
BenjaminRodenberg opened this issue Apr 11, 2019 · 1 comment

Comments

@BenjaminRodenberg
Copy link
Member

In precice/precice#102 we want to implement/implemented a MATLAB API for preCICE. However, this API is based on functionality from MATLAB R2018b and before. R2019a introduces a more comfortable interface for the generation of a MATLAB interface to a C++ Library.

@Dominanz
Copy link
Contributor

Dominanz commented Apr 11, 2019

Some details on that from my side:

In the course of coupling a MATLAB solver with preCICE for my thesis, I am writing MATLAB bindings for precice based on the C++ MEX API introduced in R2018a. I do this in my fork. This works fine, but involves explicitly writing wrapper functions and classes for the preCICE functionalities. Hence, it is a lot of code that needs to be written and maintained.

R2019a (which was released less than a month ago) introduced the clibgen package to import C++ libraries into MATLAB in a very comfortable way, more or less without writing any code. The process basically consists of two major steps:

  1. Call clibgen.generateLibraryDefinition to create a definition file from the library headers and <libname>.so file. This file must then be manually reviewed to complete the information that can't be automatically determined by clibgen.
  2. Call clibgen.build on the definition file to import the library. This will create a folder containing a new <customName>.so file. From then, functions and classes in there can be accessed as clib.<customName>.<libname>.*.

This process is really simple. Also, it makes the original bindings pretty much dispensable (for anyone with access to R2019a). However, as far as I figured it out up to now, there are a few shortcomings that must be dealt with, e.g.:

  • build wants to know the buffer size for each pointer passed as function argument. This size must be computable from constants and input arguments. However, for vector data, the solver interface gets the problem dimension from its _dimension property. This seems to be not supported in clibgen as of now. Maybe this will be remedied in the future, or otherwise this must be worked around.
  • Some C++ language features are not supported, see here. It must be carefully reviewed whether this impacts preCICE.
  • A proper building process needs to be implemented which does not include manual reviewing. Probably it will suffice to include the definition file directly into the source code.

These issues should be solved. Afterwards, clibgen can replace the MATLAB binding.

@BenjaminRodenberg BenjaminRodenberg transferred this issue from precice/precice Nov 28, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants