CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   Dlopen vs foamUser for 141 (https://www.cfd-online.com/Forums/openfoam-solving/59492-dlopen-vs-foamuser-141-a.html)

egp August 20, 2007 11:22

In the release notes of 1.4.1,
 
In the release notes of 1.4.1, there is a note about foamUser being replaced,

"foamUser and foamUtil libraries replaced by the more general dlopen method in which any libraries may be included at run-time using the optional 'libs' entry in the case controlDict, e.g. to replicate previous automatic inclusion of the foamUser and foamUtil libraries include libs ("libfoamUser.so" "libfoamUtil.so"); in controlDict."

This is a bit too cryptic for me, and unfortunately, section 3.2.6 of the 1.4.1 userGuide (dated 1 Aug 2007) has not been updated to reflect this change.

As such, does anyone have an example of how to use dlopen to link in a user library? I looked on the wiki, and no luck. A nice example of a new boundary condition, or something similar, would be cool.

Thanks, Eric

mbeaudoin August 20, 2007 12:07

Hello Eric, There are two e
 
Hello Eric,

There are two examples in the tutorials directory that explicitly use the dlopen mechanism in the controlDict file:

$FOAM_TUTORIALS/simpleFoam/pitzDaily/system/controlDict
$FOAM_TUTORIALS/oodles/pitzDaily/system/controlDict

I am still exploring this part of OF 1.4.1, so I cannot help you a whole lot more than this for now.

But since we are still using the foamUser trick for loading and using our own development with OF, I guess we will have to adjust as well .. http://www.cfd-online.com/OpenFOAM_D...part/happy.gif

Martin

egp August 20, 2007 12:59

Hi Martin, I don't see the
 
Hi Martin,

I don't see the dlopen mechanism being used in either of these cases. For the simpleFoam/pitzDaily example, it looks unchanged from earlier versions. For oodles/pitzDaily, controlDict has been modified to use the probe interface of 1.4.1.

Am I missing something? I was expecting to see a "libs" entry in controlDict with options.

Eric

mattijs August 20, 2007 13:12

What happens if you add li
 
What happens if you add

libs ("libXXXX.so");

to your controlDict?

where libXXXX.so is your library. When it loads the libraries it (dlopen) will call any static constructors. This is the mechanism used in the OpenFOAM libraries for most user settings (turbulence models, discretisation schemes etc.) so if you stick to that framework it should work.

But then this all is no different from linking in libraries during link time.

gschaider August 20, 2007 13:25

Hi Eric! For a vanilla case
 
Hi Eric!

For a vanilla case, the libs-mechanism shouldn't make any difference (using only stock-turbulence-models etc).
Havn't any experience with this implementation, but it seems to me, that libs obsoletes
http://openfoamwiki.net/index.php/Contrib_plugInPatch
(in earlier versions of OF, if you wanted to introduce your own boundary conditions/turbulence models/etc to a unmodified solver you had to include them all in the sources of the foamUser-library, now you can mix and match theCrazyTurbulenceModelHugoSentMe.so with myPersonalBoundaryConditionsForSinkingShips.so in earlier versions you had to include myPersonalBoundaryConditionsForSinkingShips.C and theCrazyTurbulenceModelHugoSentMe.C into the sources for foamUser.so and if they contradicted sigournysBoundaryConditionsForSinkingShips.C you were in deep trouble)

Anyway. This is mostly of interest for those who program (or use) run-time-selectable models (turbulence, boundary conditions) that are not part of the OF-distribution.

Bernhard

mbeaudoin August 20, 2007 13:37

Hi Eric, Sorry, my mistake
 
Hi Eric,

Sorry, my mistake about the simpleFoam/pitzDaily example, you are quite right.

But in $FOAM_TUTORIALS/oodles/pitzDaily/system/controlDict, there is an entry that looks like this in the probe interface:

functionObjectLibs ("libsampling.so");

I would think that this is the way to dynamically load the library libsampling.so at runtime with your simulation.


Now, what would be the proper syntax for simply loading your libfoamUser_version_xyz.so library instead, I don't know yet. Maybe someone from this forum could quickly provide you with a simple example?

As a side note, I sure hope that the usage of libfoamUser.so will remain as a default mechanism for loading libraries in OpenFOAM because otherwise, we will have to modify a lot of controlDict files in our different simulations in order to plug our code back in.

Martin

olesen August 20, 2007 16:59

Perhaps there might be a means
 
Perhaps there might be a means of tapping into the Debug mechanism with something like the following hand-waving:

dictionary& debug::controlDict()
{
if (!controlDictPtr_)
{
...
dlLibraryTable::readDlLibrary foo(*controlDictPtr_, "libs");
}

return *controlDictPtr_;
}


All times are GMT -4. The time now is 14:14.