Clion单步调试OpenFOAM算例
趁着元旦,搜集了一些资料,结合网上的教程,写了一个笔记,以防止后面遗忘,主要完成的事情就是使用Clion单步调试OpenFOAM-9。CLion 是由 JetBrains 开发的一款智能、跨平台的 C/C++ 集成开发环境 (IDE),以强大的代码辅助功能和现代化的开发体验著称 。至于为啥不使用visual studio 2019呢?其实都是一样的,主要依靠编写的CMakeLists文件。
例子
简单举一个例子吧,这个例子是一个一维的纯扩散问题,重点在于将调试流程跑通。
如图所示,有一根横截面积为0.01$m^3$,长L=0.5m的杆件,已知A端的温度$T_A=100°C$,B端的温度$T_B=500°C$,无内热源(S=0),杆件材质均匀,导热系数$k=1000W/(m·K)$。请使用OpenFOAM-9求解杆件内的温度分布。

这是一个典型的一维扩散问题,只有扩散项起作用,而且是稳态的数值模拟,只需用到laplacianFoam求解器即可。
求解所需要的文件
这里由于篇幅限制,只记录几个重要的文件。我实在flange这个算例上改的,可以在openfoam中将这个算例拷贝到你设定的任意目录进行修改,此算例所在的路径为:
$FOAM_TUTORIALS/basic/laplacianFoam/flange
T文件
T文件是初始文件,存放在0文件夹中
dimensions [0 0 0 1 0 0 0];
internalField uniform 100;
boundaryField
{
LEFT
{
type fixedValue;
value uniform 100;
}
WALL
{
type zeroGradient;
}
RIGHT
{
type fixedValue;
value uniform 500;
}
frontAndBack
{
type empty;
}
}
网格
就5个网格,这样也可以方便使用手算一下,和openfoam计算的对比一下。左边就是A端,右边就是B端

离散格式 fvSchemes
ddtSchemes
{
default steadyState;// 使用的是稳态的格式
}
gradSchemes
{
default none;
grad(T) Gauss linear;
}
divSchemes
{
default none;
}
laplacianSchemes
{
default none;
laplacian(DT,T) Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default corrected;
}
CMakeLists文件
这是CMakeLists文件,这是Clion可以单步调试的关键,目前这只能进行单个核心的调试,并行调试不支持
cmake_minimum_required(VERSION 3.22)
if (DEFINED ENV{WM_PROJECT})
message("Using $ENV{WM_PROJECT}-$ENV{WM_PROJECT_VERSION}")
set(WM_PATH ${CMAKE_SOURCE_DIR})
else()
message(FATAL_ERROR "OpenFOAM environment not set. Aborting.")
endif ()
# Define project parameters
project(laplacianFoam)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(OpenFOAM_VERSION $ENV{WM_PROJECT_VERSION})
set(OpenFOAM_DIR $ENV{WM_PROJECT_DIR})
set(OpenFOAM_LIB_DIR $ENV{FOAM_LIBBIN})
set(OpenFOAM_SRC $ENV{FOAM_SRC})
set(PATH_LIB_OPENMPI "sys-openmpi")
set(DEFINITIONS_COMPILE "-m64 -pthread -ftrapping-math -fno-elide-constructors -DOPENFOAM=2412
-DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor
-Wno-unused-parameter -Wno-invalid-offsetof -Wno-undefined-var-template
-Wno-unknown-warning-option -O3 -DNoRepository -ftemplate-depth-100 -fPIC
-DIMPLEMENT_ACTIVATION -Wl,-execute,-undefined,dynamic_lookup")
include_directories(.
${OpenFOAM_SRC}/OpenFOAM/lnInclude
${OpenFOAM_SRC}/OSspecific/POSIX/lnInclude
${OpenFOAM_SRC}/finiteVolume/lnInclude
${OpenFOAM_SRC}/meshTools/lnInclude
)
link_directories(${OpenFOAM_LIB_DIR} ${OpenFOAM_LIB_DIR}/dummy ${OpenFOAM_LIB_DIR}/${PATH_LIB_OPENMPI})
add_definitions("${DEFINITIONS_COMPILE}")
add_executable(${PROJECT_NAME} laplacianFoam.C)
target_link_libraries(${PROJECT_NAME} OpenFOAM dl m Pstream
finiteVolume
fvOptions
meshTools
)
求解步骤
拷贝求解器
先将laplacianFoam求解器拷贝到你的工作目录下,其路径为:
$FOAM_SOLVERS/basic/laplacianFoam/
删掉不需要的文件,只留下对应laplacianFoam对应的源文件和头文件,像这样

加载CMake项目
在当前文件夹下新建一个CMakeLists.txt文件,将上文中的内容复制进去,并加载CMake项目

点击小锤子进行构建

出现如下字样就表示构建完成了

制作算例
按照openfoam的形式制作算例,包含0、constant、system文件、网格文件以及以一个Allpre文件。

其中Allpre文件作用是网格转化。其主要的作用是将ICEM划分的网格转换为OpenFOAM所能识别的网格,而且这个也不用自己写,OpenFOAM自己就带
下面是Allpre文件
#!/bin/sh
# clean case and gen mesh
foamCleanTutorials
fluentMeshToFoam fluent.msh -2D 1
checkMesh
BFILE="constant/polyMesh/boundary"
sed -i 's/frontAndBackPlanes/frontAndBack/' $BFILE
rm constant/polyMesh/cellZones
rm constant/polyMesh/faceZones
rm constant/polyMesh/pointZones
配置调试
要想Clion直接调试这个算例文件,还需要指定一下求解器的求解路径

指定完成后,可以重新加载一下CMake项目,形如这样的形式,就可以使用laplacian求解器进行算例的求解了

单步调试
打开laplacianFoam.C文件,打上断点

在终端中,先将网格进行转换,

之后,点击小瓢虫图标开始单步调试

慢慢调试吧,这其实开刚刚开始呢

如果不想调试,想直接计算,也可以点击绿色三角形的图标,直接完成计算

计算的结果为

这与手算的结果是一致的,这里我就不贴我的结果了。
本文作者为lxz,转载请注明。