流体力学模拟
一、流体力学简介
流体力学作为力学的一个重要分支,是研究流体在平衡或运动状态时的力学规律及其与边界间相互作用规律的科学。它在土木工程、航空航天、化工工业、环境保护、石油能源等多个领域有着广泛的应用,占据着举足轻重的位置。
随着科学技术的发展,流体力学的研究和应用也越来越深入,对社会的进步和生活的发展起到了重要的推动作用。
在流体力学的研究和应用中,常用的软件有很多,其中ANSYS
和OpenFOAM
等软件备受青睐。ANSYS Fluent
以其丰富的湍流模型和多相流模型,适合多物理场仿真模拟,市场占有率较高。而OpenFOAM
(Open Field Operation and Manipulation)则是一个开源的计算流体力学CFD软件包,
OpenFOAM
提供了丰富的物理模型和数值方法,可以用于解决各种流体动力学问题,从简单的单相流到复杂的多相流、化学反应、热传导和传质等。其开源性使得用户可以自由地访问和修改源代码,根据具体需求进行定制和优化。同时,OpenFOAM
还支持并行计算,能够有效地利用多核处理器和分布式计算资源,提高仿真效率。
本文档将介绍如何在超算云桌面使用OpenFOAM V11版本进行流体力学计算,以incompressible/icoFoam/cavity
算例为例,通过模拟在一个封闭的方腔(cavity)中进行的不可压缩流动,讲解相关前后处理技巧。
如上图所示,cavity算例涉及二维正方形区域内的等温不可压缩流动,上图中几何体的所有边界都是由墙体组成。在x方向墙体以1m/s的速度移动,而其他3个墙体是静止的。流动假设为层流,将在均匀划分的网格上使用icoFoam求解器求解层流等温不可压缩流动。
二、安装OpenFOAM
运行算例所需软件
2.1 登录无锡超算云桌面https://cloud.nsccwx.cn/
2.2 在软件中心的软件中搜索并安装OpenFOAM
软件
后面将利用OpenFOAM的icoFoam求解器进行计算。
2.3 在软件中心的应用中搜索并安装Web Vnc并提交任务
2.4 打开Linux桌面,用于后续网格的前后处理
三、网格前处理
3.1 准备计算数据
OpenFOAM安装在目录:/apps/support/intel_spr_rocky8.9/openfoam/11/intel2023.2_impi/OpenFOAM-11
,cavity算例位置在:/apps/support/intel_spr_rocky8.9/openfoam/11/intel2023.2_impi/OpenFOAM-11/tutorials/legacy/incompressible/icoFoam/cavity
,然后使用云桌面SSH终端把cavity案例复制到家目录data存储下。
之后使用云桌面文件夹工具,双击打开cavity下的system中的blockMeshDict文件:
blockMeshDict如下所示,为方便理解加入了部分注释:
/*--------------------------*- C++ -*--------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 11
\\/ M anipulation |
\*-------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//用于定义几何的尺寸缩放系数,其缩放系数应用于所有坐标轴
convertToMeters 0.1;
//建立8个点坐标
vertices
(
(0 0 0)
(1 0 0)
(1 1 0)
(0 1 0)
(0 0 0.1)
(1 0 0.1)
(1 1 0.1)
(0 1 0.1)
);
//(20 20 1) 表示x、y方向20个,z方向1个
blocks
(
hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);
// 设置边界条件
boundary
(
//构成移动墙体的面的点
movingWall
{
type wall;
faces
(
(3 7 6 2)
);
}
fixedWalls
{
type wall;
faces
(
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
);
}
frontAndBack
{
type empty;
faces
(
(0 3 2 1)
(4 5 6 7)
);
}
);
// ******************************************************************* //
3.2 划分网格
首先在Linux桌面打开SSH终端,执行命令加载OpenFOAM V11软件:
然后在‘cavity’目录下,运行blockMesh命令划分网格:
网格划分完成后,使用paraview查看网格。
3.3 查看网格
首先在Linux桌面打开SSH终端,执行命令加载paraview软件:
然后运行paraview命令加载blockMesh生成的.foam文件,并查看划分完成的网格:
四、计算
4.1 设置边界和初始条件
首先,初始0文件夹内文件设置,在计算过程当中主要涉及的是参数的设置,在初始值0文件夹当中,P文件内的参数设置主要如下:
/*----------------------------*- C++ -*-------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 11
\\/ M anipulation |
\*-------------------------------------------------------------------*/
FoamFile
{
format ascii;
class volScalarField;
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
movingWall
{
type zeroGradient;
}
fixedWalls
{
type zeroGradient;
}
frontAndBack
{
type empty;
}
}
// ******************************************************************* //
/*-----------------------------*- C++ -*-------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 11
\\/ M anipulation |
\*-------------------------------------------------------------------*/
FoamFile
{
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
movingWall
{
type fixedValue;
value uniform (1 0 0);
}
fixedWalls
{
type noSlip;
}
frontAndBack
{
type empty;
}
}
// ******************************************************************* //
/*------------------------------*- C++ -*-----------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 11
\\/ M anipulation |
\*-------------------------------------------------------------------*/
FoamFile
{
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//表示使用的解析器
application icoFoam;
//设置计算开始的时间
startFrom startTime;
startTime 0;
//设置结束的时间
stopAt endTime;
endTime 0.5;
deltaT 0.005;
//写入的类型,表示每0.1秒写入一次
writeControl timeStep;
writeInterval 20;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
// *********************************************************************//
4.2 提交算例
五、计算结果后处理
首先将icoFoam生成的.out文件后缀修改为.foam,同上面前处理,打开Linux桌面运行paraview命令加载.foam文件对计算结果进行后处理: