09、openfoam案例之圆柱绕流

yizhihongxing

1、原视频地址

https://www.bilibili.com/video/BV1ME411A73k/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=33b50a4dd201d7564e6e63d321809ce9

2、网格划分及导入

2.1 网格划分

本案例使用ICEM划分网格,并导入openfoam中
image

2.2 网格转换

目前通过在 3 维中定义网格来处理 2 维几何,其中前平面和后平面定义为空边界块类型。读取二维 Fluent 网格时,转换器会自动在第三方向拉伸网格并添加空面片,将其命名为 frontAndBackPlanes。

fluentMeshToFoam:读取fluent.msh网格文件。(指南的5.5章)

命令:

fluentMeshToFoam <meshFile>

image-20230410205215587

2.3 检查网格

checkMesh

image-20230410205306166

system/blockMeshDict文件可以删除

3、边界条件

3.1 网格boundary

这是转换网格后自动生成的。

/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       polyBoundaryMesh;
    location    "constant/polyMesh";
    object      boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

5
(
    INLET
    {
        type            patch;
        nFaces          30;
        startFace       13060;
    }
    OUTLET
    {
        type            patch;
        nFaces          30;
        startFace       13090;
    }
    WALL
    {
        type            wall;
        inGroups        List<word> 1(wall);
        nFaces          100;
        startFace       13120;
    }
    CYLINDER
    {
        type            wall;
        inGroups        List<word> 1(wall);
        nFaces          120;
        startFace       13220;
    }
    frontAndBackPlanes // 空,表示2维
    {
        type            empty;
        inGroups        List<word> 1(empty);
        nFaces          13200;
        startFace       13340;
    }
)

// ************************************************************************* //

3.2 0/P文件

  1. 在OpenFOAM中,zeroGradient是一种边界条件,用于指定在边界上的量的梯度为零,这意味着该边界的值不会改变。例如,对于速度边界条件,zeroGradient表示速度沿该边界的梯度为零,即速度沿该边界的值不会改变。通常,这种边界条件在流体边界和对称边界上使用。在代码中,它表示为:image-20230410210614033
  2. 在 OpenFOAM 中,fixedValue 是一种边界条件类型,表示在特定的边界上施加固定的值。这个值通常是在 0uniformnonuniformlist 中指定的,具体取决于场的类型和边界的特征。例如,在一个流体模拟中,可以将固定的速度值施加在流场的边界上,这可以通过设置边界条件类型为 fixedValue 并指定速度值来实现。同样地,可以将固定的温度、压力或其他物理量值应用于相应的场变量上。在 OpenFOAM 中,边界条件的设置是在 case 目录下的 0 文件夹中的 boundary 文件中完成的。使用 fixedValue 边界条件时,用户需要指定固定的值并将其应用于适当的边界。
  3. 在OpenFOAM中,empty边界类型用于定义没有物理边界或者该边界不需要与周围区域相互作用的情况。例如,计算空气在室内流动的情况,室内墙壁可以定义为empty边界。在empty边界中,OpenFOAM不会对物理量进行任何修改,因此需要在边界条件的设置中进行额外的注意。在empty边界中,通常会使用fixedValue或者fixedGradient来设置边界条件。
/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       volScalarField;
    object      p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 0;

boundaryField
{
    INLET // 压力梯度为0
    {
        type            zeroGradient; // 压力梯度为0
    }
    
    WALL
    {
        type            zeroGradient;
    }

    CYLINDER
    {
        type            zeroGradient;
    }
    
    OUTLET // 出口压力为固定值0
    {
        type            fixedValue; 
        value           uniform 0;
    }

    frontAndBack
    {
        type            empty;
    }
}

// ************************************************************************* //

3.3 0/U文件

  1. internalField是指某个场量在整个计算域内的初始值。在进行流体流动计算时,internalField可以表示压力、速度、温度等场量的初始值。internalField可以被定义为标量、向量、对称张量和非对称张量场量。常见的初始化方法包括常数、分布式初始化和从其他场量插值得到。例如,对于速度场量,可以通过设置其为一个初始速度场量或者通过从初始条件的压力梯度中计算得到。一旦internalField被定义,将无法在后续的计算过程中修改。因此,需要根据计算需求仔细地定义initialField。
/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       volVectorField;
    object      U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 1 -1 0 0 0 0];

// 场内初始值
internalField   uniform (50 0 0);

boundaryField
{
    INLET // 速度为固定值ux=50m/s
    {
        type            fixedValue; 
        value           uniform (50 0 0);
    }
    
    WALL
    {
        type            fixedValue;
        value           uniform (50 0 0);
    }
    
    OUTLET
    {
        type            zeroGradient;
    }

    CYLINDER
    {
        type            fixedValue;
        value           uniform (0 0 0);
    }

    frontAndBack
    {
        type            empty;
    }
}

// ************************************************************************* //

oepnfoam中zeroGradient和uniform (0 0 0)的区别:

zeroGradient只表示在边界上梯度不变,并不是不随时间变化。

uniform (0 0 0)更强硬一些,就是为某个值。

4、计算参数

4.1 controlDict

/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    location    "system";
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application     icoFoam;

startFrom       startTime;

startTime       0;

stopAt          endTime;

endTime         0.05;

deltaT          0.00001; // Co = U * t / x

writeControl    timeStep;

writeInterval   100;

purgeWrite      0;

writeFormat     ascii;

writePrecision  6;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable true;


// ************************************************************************* //

4.2 fvSchemes

/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

ddtSchemes
{
    default         Euler;
}

gradSchemes
{
    default         Gauss linear;
    grad(p)         Gauss linear;
}

divSchemes
{
    default         none;
    div(phi,U)      Gauss linear;
}

laplacianSchemes
{
    default         Gauss linear orthogonal;
}

interpolationSchemes
{
    default         linear;
}

snGradSchemes
{
    default         orthogonal;
}


// ************************************************************************* //

4.3 fvSolution

/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  9
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    p
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance       1e-06;
        relTol          0.05;
    }

    pFinal
    {
        $p;
        relTol          0;
    }

    U
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-05;
        relTol          0;
    }
}

PISO
{
    nCorrectors     2;
    nNonOrthogonalCorrectors 0;
    pRefCell        0;
    pRefValue       0;
}


// ************************************************************************* //

5、计算

icoFoam > log

image-20230410212245907

6、后处理

生成临时后处理文件

paraFoam -builtin

image-20230410212654657

原文链接:https://www.cnblogs.com/dbai/p/17304392.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:09、openfoam案例之圆柱绕流 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 【Visual Leak Detector】使用注意事项

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍使用 VLD 时的注意事项。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 官网文档 2. 注意事项 1. 官网文档 可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2…

    C++ 2023年4月17日
    00
  • C++/Qt网络通讯模块设计与实现(六)

    前面章节主要讲述网络通讯客户端的实现,各位小伙伴需认真阅读以及理解,理会其中的思想,有疑问的地方可及时给我私信,我都会非常认真地解答大家的疑惑。 C++/Qt网络通讯模块设计与实现(一) C++/Qt网络通讯模块设计与实现(二) C++/Qt网络通讯模块设计与实现(三) C++/Qt网络通讯模块设计与实现(四) C++/Qt网络通讯模块设计与实现(五) 这节…

    C++ 2023年4月18日
    00
  • C++:explicit关键字

    C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的,跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。 那么显示声明的构造函数和隐式声明的有什么区别呢? 来看下面的例子: class CxString // 没有使用explicit关…

    C++ 2023年4月18日
    00
  • C++深拷贝与浅拷贝

    浅拷贝的问题 默认提供的拷贝构造就是浅拷贝,如果拷贝的对象中含有成员指针变量指向堆区中的内存空间,那么就会出现两个对象中的成员指针变量指向同一块堆区空间,当方法执行结束后,对象就会被释放,调用析构函数(析构函数中存在释放在堆区开辟的内存空间),就会存在一块内存空间被多次释放的问题。 解决办法 自己写拷贝构造,让拷贝构造后的对象中的成员指针变量指向一块新的内存…

    C++ 2023年4月25日
    00
  • 最短路径问题

    平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间,其中的一些点之间有连线。 若有连线,则表示可从一个点到达另一个点,即两点间有通路,同路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短路径。 小提示: 两点的距离:如果点\(A\)坐标为\((x_A,y_A)\),点\(B\)的坐标为\((x_B,y_B)\),\…

    C++ 2023年4月24日
    00
  • 玩一玩 Ubuntu 下的 VSCode 编程

    一:背景 1. 讲故事 今天是五一的最后一天,想着长期都在 Windows 平台上做开发,准备今天换到 Ubuntu 系统上体验下,主要是想学习下 AT&T 风格的汇编,这里 Visual Studio 肯定是装不了了,还得上 VSCode,刚好前几天买了一个小工控机,这里简单记录下 零到一 的过程吧。 二:搭建一览 1. VSCode 安装 在 U…

    C++ 2023年5月3日
    00
  • 内存淘汰策略|页面置换算法对比总结

    在学习【操作系统】 【MySQL】【Redis】后,发现其都有一些缓存淘汰的策略,因此一篇小文章总结一下。 目前还没着笔,初略一想MySQL和操作系统应该都是使用的年轻代和老生代的改进策略,而Redis使用的是随机抽的策略。 MySQL MySQL中存在一个内存缓存池,Buffer Pool。里面存在着控制块和缓存的数据页(当然还有些其他缓存,比如:锁信息、…

    C++ 2023年4月18日
    00
  • 2023团队天梯模拟赛 L2-3 智能护理中心统计 and L3-1 塔防游戏(23分)

    L2-3 智能护理中心统计 智能护理中心系统将辖下的护理点分属若干个大区,例如华东区、华北区等;每个大区又分若干个省来进行管理;省又分市,等等。我们将所有这些有管理或护理功能的单位称为“管理结点”。现在已知每位老人由唯一的一个管理结点负责,每个管理结点属于唯一的上级管理结点管辖。你需要实现一个功能,来统计任何一个管理结点所负责照看的老人的数量。 注意这是一个…

    C++ 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部