Clion单步调试OpenFOAM中的laplacianFoam求解器

lxz 187 0

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求解杆件内的温度分布。

Clion单步调试OpenFOAM中的laplacianFoam求解器

这是一个典型的一维扩散问题,只有扩散项起作用,而且是稳态的数值模拟,只需用到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端

Clion单步调试OpenFOAM中的laplacianFoam求解器

离散格式 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对应的源文件和头文件,像这样

Clion单步调试OpenFOAM中的laplacianFoam求解器

加载CMake项目

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

点击小锤子进行构建

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

制作算例

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

其中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直接调试这个算例文件,还需要指定一下求解器的求解路径

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

单步调试

打开laplacianFoam.C文件,打上断点

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

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

Clion单步调试OpenFOAM中的laplacianFoam求解器

计算的结果为

Clion单步调试OpenFOAM中的laplacianFoam求解器

这与手算的结果是一致的,这里我就不贴我的结果了。

发表评论 取消回复
表情 图片 链接 代码

分享