OpenFOAM 自定义库编译
除了修改最顶层的求解器之外,当需要修改相关的底层库时仍需要对其库进行编译。编译较多,但没有总结过,本文暂总结,后续遇到其他问题会更新。
自定义库的编译层级自己可以选, 一个是也放在solver 顶层,这比较安全,但是如果自己定义的库也希望在不同solver内使用,当然是定义在OF 库本身的层级更节省代码和编译复用性。
以最近手头的一个新的动网格求解库为例。平台:OpenFOAM2106。主要分三步来编译:
- 新建一个库路径及其源文件
- 建立软链接
- 写入编译路径并编译:wmake libso
1.源码路径选择
在新建库的时候不建议直接从头写,建议是根据自己的需求和要实现的功能,找到最相近的现有类库,在同级目录下touch 一个新的并复制原有基础类库,在其框架上修改。
本文涉及的库就放在路径$SRC/fvMotionSovler/fvMotionSolvers/displacement/separatedZoneLaplacianDisplacement/
下。
包含两个源文件
separatedZoneLaplacianDisplacement.H
separatedZoneLaplacianDisplacement.C
2.建立软链接
编译的过程中会有链接这个过程。在程序设计过程中为了保证链接文件的路径一致性,会采取软链接的方式。(可以理解为Win 系统下的快捷方式)
软链接和硬链接的区别有点类似于引用传参和值传参。 对于前者,其不对源代码或者文件进行复制,该软链接文件只保存指向源文件的信息,后者会生成一个复制拷贝。
ln -s [source file] [generated link] ## 生成软链接
ln [source file] [generated link] ## 生成硬链接
需要注意的是,建议在想要生成软链接的目的路径下执行上述命令。
本文涉及的操作为
cd $SRC/fvMotionSoler/lnInclude/
ln -s ../fvMotionSolvers/displacemet/separatedZoneLaplacianDisplacement/separatedZoneLaplacianDisplacement.H separatedZoneLaplacianDisplacement.H
ln -s ../fvMotionSolvers/displacemet/separatedZoneLaplacianDisplacement/separatedZoneLaplacianDisplacement.C separatedZoneLaplacianDisplacement.C
建立后通过 ls -li
在lnInclude 目录下查看软链接的生成情况。
3.修改编译配置文件并编译
在/Make 文件夹中的file 文件 中添加源码路径
在/Make的同级目录下编译即可
wmake libso