OpenFOAM中的多孔介质

本文详细介绍了如何在OpenFOAM v9中设置多孔介质,通过Darcy-Forchheimer定律实现阻力源项,并以湍流VOF溃坝案例为例,展示了如何应用多孔介质模型阻止水流穿透。关键步骤包括创建cellSet和cellZoneSet,配置fvModels中的explicitPorositySource。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenFOAM中设置多孔介质

通过在流体中的特定区域添加阻力源项,模拟流体流过多孔介质后的动量损失
其源项由DarcyForchheimer定律得到
S i = − ( μ d + ρ ∣ U ∣ 2 f ) U i S_{i}=-\left(\mu d+\frac{\rho|U|}{2} f\right) U_{i} Si=(μd+2ρUf)Ui式中 i i i x , y , z x,y,z x,y,z方向,第一项类似于附加粘性,第二项类似于气动阻力
OpenFOAM v9中可以通过添加system/topoSetDictconstant/fvModels这两个字典实现多孔介质区域的设置

system/topoSetDict文件

使用圆柱来划分一个区域,命名该区域的名称为porosz

/*--------------------------------*- 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;
    object      topoSetDict;
}

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

actions
(
    {
        name    poros;          // 区域命名为poros
        type    cellSet;
        action  new;
        source  cylinderToCell; // 圆柱区域
        sourceInfo
        {
          p1       (0.438 0.048 0); // 圆柱体上表面的中心点
          p2       (0.438 0 0);   	// 圆柱体下表面的中心点
          radius   0.017;         	// 圆柱半径
        }
    }

   {
        name    porosz;         // 区域命名
        type    cellZoneSet;    
        action  new;
        source  setToCellZone;  // 将圆柱区域转换为网格区域
        sourceInfo
        {
            set poros;          // 给定source信息
        }
    }
);

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

constant/fvModels文件

fvModels类是v9版本新增加的内容,用于替换原本的fvOptions类
fvModels文件用于指定porosz区域为explicitPorositySource类型,即多孔介质

/*--------------------------------*- 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 "constant";
    object fvModels;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
poros
{
    type            explicitPorositySource;   // 类型

    explicitPorositySourceCoeffs              
    {
        selectionMode   cellZone;             
        cellZone        porosz;               // 已经产生的网格区域

        type            DarcyForchheimer;     // 达西定律

        D 1e15;                              // 非常大的粘性阻力

        d   ($D $D $D);                       // 各向同性
        f   (0 0 0);

        coordinateSystem                      // 旋转坐标系的设定
        {
            type    cartesian;                // 笛卡尔坐标系
            origin  (0 0 0);
            coordinateRotation            
            {
                type    axesRotation;         // 此算例设定无旋转,e1, e2, e3分别为x, y, z轴
                e1  (1 0 0);
                e2  (0 1 0);
                e3  (0 0 1);
            }
        }
    }
}

案例结果

找到湍流VOF两项流的溃坝案例(/opt/openfoam9/tutorials/multiphase/interFoam/RAS/damBreak),以该案例为基础,使用topoSet命令在指定区域加入多孔介质(下图中紫色区域为多孔介质)
在这里插入图片描述
然后使用system/setFieldsDict文件和setFields命令设置初始水的位置
在这里插入图片描述为了使用多核计算,使用decomposePar -force将网格分配给不同处理器,使用mpirun -np 8 interFoam -parallel | tee log命令开始计算,计算完成后使用reconstructPar命令将不同处理的结果汇总到项目根目录,最后使用paraFoam命令打开paraView实现后处理。

这里推荐一个制作gif动态图的网站https://www.matools.com/gif

计算结果如下
在这里插入图片描述可以看出由于多孔介质的阻力非常之大,以致于水是不能进入其中的。多孔介质区始终保留了最初储存的空气。所以使用多孔介质是可以模拟固体的。

代码部分参考了:https://blog.csdn.net/thgink9/article/details/121802760

### OpenFOAM多孔介质模拟与配置 在 OpenFOAM 中,多孔介质的模拟可以通过多种方式实现。主要通过 `Darcy` 和 `Forchheimer` 方程来描述流体流动行为[^1]。这些方程可以被集成到求解器中以处理复杂的多孔介质问题。 #### 多孔区域定义 为了设置多孔介质模型,在网格文件夹中的 `constant/polyMesh/boundary` 文件里需指定哪些区域属于多孔介质部分。通常会创建一个新的边界条件或者内部区域用于表示多孔材料属性[^2]。 #### 配置参数 多孔介质的相关物理特性可以在字典文件 `constant/transportProperties` 或者专门建立的一个新文件如 `porosityProperties` 中设定。以下是常见的几个关键参数: - **d**: Darcy系数矩阵 (阻力项),单位为 m^-2。 - **f**: Forchheimer系数向量 (惯性损失项),单位为 kg/m^3。 下面是一个简单的例子展示如何配置这两个重要变量: ```foam porousZone { type fixedCoeffs; value uniform (0 0 0); d (1e5 0 0, 0 1e5 0, 0 0 1e5); // Example of diagonal matrix for Darcy term. f (0.5 0 0); // Example vector values for Forchheimer term. } ``` 此代码片段展示了如何在一个特定区域内应用多孔效应,并指定了相应的阻尼因子和惯性因子[^3]。 #### 使用案例 对于实际操作而言,可以选择合适的求解程序比如 `simpleFoam`, `pimpleFoam` 来运行带有多孔选项的应用场景。确保所选求解器支持压力速度耦合算法以及能够正确解析非均匀场分布情况下的动量源项计算逻辑[^4]。 此外需要注意的是当涉及到复杂几何结构时可能还需要额外调整数值方案以获得稳定收敛的结果。 ```bash blockMesh snappyHexMesh setFields decomposePar mpirun -np X simpleFoam -parallel reconstructPar postProcess ``` 以上命令序列可用于执行并行化的大规模仿真流程,其中包含了前处理阶段直至后处理可视化输出整个过程概述[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jedi-knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值