VS Code的OpenFOAM插件(OFextension)介绍

1 介绍

VSCode的OpenFOAM插件。本插件依托于C/C++插件,用于快速部署开发环境以适配OpenFOAM求解器代码。
代码跳转、悬浮提示、调试等功能是写求解器所必备的功能,本插件基于自己的一点理解所开发,对小白友好,一键完成部署。

代码仓库

2 快速开始

  • 在插件设置中指定OpenFOAM和gdb的路径 (Settings-> Extensions: OFextension中的OFpathGDBpath);
    基本设置
    务必确保在OFpath中正确指定了自己的OpenFOAM路径。如果不需要调试,就不用管GDBpath
  • F1Ctrl+Shift+P打开命令面板,搜索并运行ofInit命令;
    运行ofInit命令
  • 调试前请初始化算例(如清理算例、网格生成等,这很关键!),然后按键F5或通过调试面板启动调试。

2.1 特性展示

  • 语法高亮与鼠标悬浮提示
    语法高亮与鼠标悬浮提示
  • 代码跳转 (阅读源码很有用!)
    代码跳转
  • 调试
    调试
!!!有关调试的重要说明 (比较复杂,有需要的点击展开查看)

OpenFOAM通过源码编译安装时有三个模式可以选择,即$WM_COMPILE_OPTION=Opt|Debug|Prof
其中Opt是默认的模式,其编译过程会调用编译器优化,最终得到的程序体积相对更小,执行效率相对也最高。
Debug模式则会包含更多额外的信息用于调试查看,因此在此模式下编译最终得到的程序体积最大,执行效率也更低。
Prof模式编译的程序可用于性能分析,相比Opt的程序也需要引入额外开销。
通过系统自带的包管理器(比如Ubuntu的apt)安装的OpenFOAM一般都是在Opt模式下编译得到然后打包的。
我们正常编译安装也是如此(自己编译安装是可以控制该选项的!可以得到特定模式下的程序,因此更自由!)。

为了便于分析,这里我将OpenFOAM编译的内容区分为应用程序(对应application目录中的内容)
(对应src目录中的内容)。原则上,要调试的程序必须是在Debug模式下编译的才行。那是不是用包管理器编译安装的OpenFOAM或者自己用默认的Opt模式编译的OpenFOAM就不能调试了呢?
也不绝对是这样。
考虑一种最常见的情况:库Opt+应用程序Debug。这时候是可以启动调试器的,只不过有些情况下无法深入查看库中的内容。拿速度场U来举例,如果我们想查看U.name()的值,此时就会无返回结果。原因在于name_属性继承自IOobject,在中它使用的是Opt模式来编译的。但是在这种情况下却可以查看速度场在网格中或者边界上的值。因此如果你不想使用Debug模式重新编译一遍OpenFOAM,那么就可以使用这种特殊的组合方式来调试(即库采用默认的Opt模式,求解器使用Debug模式编译),但同时需要认识到这种模式的缺陷(遇到问题的时候自然就知道了,比如无法正常使用gdbof的完整功能)。

因此该插件中给出了两个额外的配置项:OFbuildoptOFdebugopt,分别用来指定用于正常编译运行(算case)以及用于调试的变量设置。两者都可以指定WM_COMPILER、WM_MPLIB、WM_NCOMPPROCS、FOAMY_HEX_MESH、WM_NCOMPPROCS等选项(按照自己编译时给定的值设置即可)。OFdebugopt影响最终调试如何进行。
以自编译的$HOME/OpenFOAM/OpenFOAM-8为例,如果OFdebugopt设置为WM_COMPILE_OPTION=Debug,那最终的激活环境的命令为source $HOME/OpenFOAM/OpenFOAM-8/etc/bashrc WM_COMPILE_OPTION=Debug,这时候$FOAM_USER_APPBIN会指向.../linux64GccDPInt32Debug,即所有的库以及该求解器都需要使用Debug模式编译才行。如果OFdebugopt设置为; export WM_COMPILE_OPTION=Debug,那最终调用的激活环境的命令为source $HOME/OpenFOAM/OpenFOAM-8/etc/bashrc; export WM_COMPILE_OPTION=Debug,这时候$FOAM_USER_APPBIN会指向.../linux64GccDPInt32Opt,即这种情况下后一句export命令并没有影响到前一句环境,即OF主体上还是Opt模式的,相关的环境变量也都会是带有Opt的,在此之后Debug模式才生效,最终的效果就是库Opt+求解器Debug(也就是前面分析过的情况)。

总结来说, 库Opt+应用程序Debug情况下的调试算是一种部分调试(本插件默认的配置就属于这种情况),主要针对应用程序部分的,而整个OF完全在Debug模式下编译,即库Debug+应用程序Debug情况下的调试是完整调试,对应用程序代码都有效。

2.2 视频演示

VS Code的OpenFOAM插件(OFextension)演示

  • Step1. 拷贝求解器, 修改Make/files(注意:保证EXE输出到有权限的路径下)
1
2
3
4
5
6
7
8
9
10
11
# 激活OpenFOAM环境
$ of8
$ foamVersion
OpenFOAM-8
# 切换到求解器目录
$ run
$ cd ../solver
# 拷贝要调试的求解器和测试算例
$ cp $FOAM_SOLVERS/incompressible/icoFoam -r .
$ cd icoFOAM
$ sed -i 's/FOAM_APPBIN/FOAM_USER_APPBIN/g'
  • Step2. 拷贝算例、算例初始化(网格生成等,每次调试前都需要注意算例的状态)
1
2
3
4
$ cp $FOAM_TUTORIALS/incompressible/icoFOAM/cavity/cavity -r debug_case
$ cd debug_case
$ foamCleanTutorials && blockMesh 2>&1 | tee log.blockMesh
$ cd ..
  • Step3. 运行ofInit。
    按F1,搜索并运行ofInit。等待片刻,.vscode中会自动生成相关配置文件。这里需要查看相关的日志文件log.wmake*,确保没有报错。

2.3 相关参考

3 安装教程

3.1 依赖

  • OpenFOAM需要在Linux平台使用,本插件适用于Linux平台。使用Remote-WSL或者Remote-SSH连接WSL或者远程Linux服务器也可。
  • C/C++插件,用于高亮显示、跳转、鼠标悬浮提示等。
1
2
3
4
Name: C/C++  
Id: ms-vscode.cpptools
Description: C/C++ IntelliSense, debugging, and code browsing.
Publisher: Microsoft
  • 调试需要gdb。 可以通过系统包管理器安装,比如Ubuntu下:sudo apt update && sudo apt install gdb -y。也可以选择自己编译的版本。

3.2 离线安装

按F1,搜索vsix,选择Extensions: Install from VSIX…,选择ofextension_vxxx.vsix即可

3.3 Extension Marketplace中搜索安装

搜索OFextension,安装即可。

4 架构

待补充

5 参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request