SnappyHexMesh(之八)体加密

转载:知乎大神 中国空气动力研究与发展中心 力学博士 刘云楚 的文章

5.5.5体加密

用户在几何字典(geometry)中定义了几何区域,例如:三维几何模型(searchable Box)、上传三角面元几何模型(triSurfaceMesh)或二维几何模型(searchable Disk)。然后可通过定义refinementRegions字典对几何区域网格进行体加密。体加密相关参数包括基础加密参数设置、细化小特征(gapMode)以及各向异性设置(levelIncrement)。

命令输入示例如下所示:

refinementRegions
{
    Box // 几何名称
    {
        mode inside;
        levels ((1.0 4));
    }
    …
}

基本参数设置

基本参数包括体区域位置与细化等级参数。

体加密区域位置指定包含三种方式:inside、outside、distance,其中inside为细化几何区域内所有网格,几何区域必须为封闭三维结构;outside为细化几何区域外所有网格,几何区域要求与inside一致;distance为细化几何表面指定范围区域内所有网格。

体加密细化等级levels由两个参数指定。第一位参数为指定细化距离,第二位参数为指定细化等级值。

图1. 体加密区域位置示意图

当用户使用inside与outside方法进行体加密时,只需要设置细化等级参数levels第二位细化等级值,前一位参数只做占位设置(不参与计算)。

inside命令用法如下:

refinementRegions
{
    box
    {
        mode   inside;
        levels ((1.0 4));
    }
}

Outside设置要求与inside相同命令用法如下:

refinementRegions
{
    box
    {
        mode outside;
        levels ((1.0 4));
    }
}

若使用distance方法进行体加密,则需同时设置两位参数,且允许用户使用多组细化参数进行体网格加密

distance命令用法如下:

refinementRegions
{
    box0
    {
        mode distance;
        levels
        (
            (0.5 3) //在0.5米范围内细化等级为3
            (1 2)   //在1米范围内细化等级为2
        );
    }
}

通过distance方法体加密后效果如下所示:

图2. distance方法体加密效果图

细化小特征gapMode

snappyHexMesh中体细化高级功能gapMode能够自动在较小的间隙以及紧密特征区域之间指定更高细化等级。对于具有大尺度的复杂特征面,手动针对这些区域加密可能会涉及大量交互操作。新版本增加了针对闭合几何的间隙区域,自动检测和细化的能力。

当初始背景网格尺寸大于窄缝处几何尺寸时,snappyHexMesh基于网格的算法通常在此处生成的网格质量较差或则直接忽略窄缝特征,传统方法若想保留此处特征需要单独对窄缝进行体加密。现采用gapMode功能,软件检测算法分两步进行:背景网格尺寸大于几何特征时,优先采用表面算法(表面算法仅适用于三角面元triSurfaceMesh),并检测相对靠近表面的三角形中心,满足细化条件则根据gapLevel设置参数对窄缝处网格进行细化。若窄缝处拥有足够的细化网格,则切换到基于网格的算法。通过此检测过程,完成对几何间隙的自动化加密。

具体命令参数如下所示:

refinementRegions
{
    ref1
    {
        mode     inside;
        levels   ((10000 0));
        gapLevel (4 0 10);
        gapMode  inside;
    }
}

其中gapLevel指定三个参数(a b c)具体意义为:a、指定准备在间隙中划分的单元数(此值需大于3,太小容易导致间隙处网格生成质量较低);b、应用检测识别特征与开始优化的最小单元细化等级(默认为0,背景网格尺寸);c、应用检测和停止优化的最大单元细化等级。

下例展示了几何中小圆管特征自动加密情况。

各向异性levelIncrement

snappyHexMesh在v1806以上版本中引入各向异性体网格细化方法levelIncrement,用户可以在封闭区域中指定XYZ方向网格细化,并且允许用户针对一定细化等级范围内所有单元,进行网格各向异性细化。该功能只支持inside和outside区域位置方法。

以下示例说明用法:

refinementRegions
{
    wakeBox
    {
        mode           inside;
        levels         ((1e15 3));
        levelIncrement (2 4 (2 0 0));
    }
}

上述levelIncrement命令效果为对wakeBox区域内所有2-4细化等级间的单元,在x方向细化两次。

通过各向异性体加密后效果如下所示:

图5. 体加密各向异性网格效果图

注意:使用各向异性命令后,cellLevel文件内参数值将取任意方向上的最大细化等级值,生成的实际网格文件与cellLevel、pointLevels文件参数不再保持一致。即该网格文件不再适用于动网格等涉及网格变换的求解器。

原文地址:https://www.cnblogs.com/Xiwang-Sun/p/15370753.html