AMCAX Kernel
Geometry kernel for CAD/CAE/CAM
九韶内核 1.0.0.0
载入中...
搜索中...
未找到
二维边界层详细 JSON 示例

概述

本教程提供使用网格剖分,二维边界层的详细配置方法。

功能描述

通过在流体靠近物体表面的区域内更密集地划分网格,以更好地捕捉流体速度剖面的变化,以及流体粘性效应的影响。
输入:选定的边界;输出:边界层网格(四边形)。

step 模型说明

step 格式的 cad 模型及其边、面编号如下图所示,这些模型将用于本教程中。

模型1为:

模型2为:

基本 Json 模板

以下是最基本的 Json 配置,更多复杂配置请看复杂 Json 模板。

{
"BoundaryLayer":
[
{
"DistributionType": "Separation",
"EntityType": "Edge",
"EFPairs":
[
{
"E": 25,
"F": 3
}
],
"Basic":
{
"GrowthRate":
{
"Constant": 1.5
},
"InitLayerHeight":
{
"Absolute": 0.1
},
"NLayers": 5,
"ProblematicAreasTreatment": "COLLAPSE"
}
}
],
"MeshSize": [
{
"CurvatureFactor": 0.2,
"GrowthRate": 1.1,
"MaxSize": 0.85,
"MinSize": 0.1,
"MeshingDim": 2,
"SelectedEntities": []
}
],
"ThreadNum": 1
}


是否必需 取值范围 默认值 备注
BoundaryLayer EntityType [Face, Edge]
BoundaryLayer EFPairs/SelectedEntities
BoundaryLayer-Basic GrowthRate "Constant"、"Variable"
[1.0,2.0]
增长率不变:"Constant",其值为固定值,即每层的固定增长率
增长率变化:"Variable",其值为数组,即每层的变化增长率
BoundaryLayer-Basic InitLayerHeight Absolute:[eps,MaxSize]
Aspect:[eps,1]
绝对模式:"Absolute",初始层高恒定不变
Aspect模式:"Aspect",初始层高为乘以局部表面网格长度的因子
BoundaryLayer-Basic NLayers [1,inf]
BoundaryLayer-Basic ProblematicAreasTreatment STOP、SQUEEZE、COLLAPSE、EXCLUDE 问题区域处理方式
STOP:没有按照预计参数进行时,停止生成
SQUEEZE:允许挤压层来克服交叉、接近或质量问题
COLLAPSE:允许某些局部区域的折叠,从而导致边界层生成时的交叉、接近或质量问题
EXCLUDE:允许排除某些局部区域,导致交叉,接近或质量问题的边界层的生成

基本配置说明

EntityType & EFPairs

"EntityType": "Edge",
"EFPairs":
[
{
"E": 25,
"F": 3
}
]

在某个 face 内,从 face 的一些边界 edge 向 face 内部生长的四边形网格,如下图。
"EntityType": "Edge",表示从 edge 向 face 生成 2d 边界层。 指定从 XX edge 向 XX face 生长,示例表示,从 edge(tag=25)向 face(tag=3)生长。注意:edge 应该是 face 的边界边。

基础参数设置

"Basic":
{
"InitLayerHeight":
{
"Absolute": 0.1 // Absolute, Aspect
},
"GrowthRate":
{
"Constant": 1.5 // Constant, Variable
},
"NLayers": 5,
"ProblematicAreasTreatment": "COLLAPSE" // STOP, SQUEEZE, COLLAPSE, EXCLUDE
}

InitLayerHeight

绝对模式,值为初始层高度,每个节点高度固定不变(相对于 Aspect 模式来说),即不会随着局部表面网格尺寸不同而不同。(标准初始层高:https://www.cfd-online.com/Tools/yplus.php)。而 Aspect 模式,值为局部表面网格长度的因子,通过乘以局部表面网格尺寸来定义第一层高度。
为了显示绝对模式和 Aspect 模式下网格生成效果,在基本 Json 范例中添加线网格剖分方式中的 Linear 分布剖分:

{
"Distribution": [
{
"EntityType": "Edge",
"SelectedEntities": [25],
"DistributionType": "Linear",
"Orientation": "Forward",
"Symmetric": true,
"NElement":10,
"EndBeginElementRatio":3
}
]
}

当初始层高度为绝对模式时,根据如下结果图可以看出每个节点的初始层高不会随着局部网格尺寸的变化而变化。

"Aspect": 0.1 // 取值范围:[eps,1]

当初始层高度为 Aspect 模式时,根据如下结果图可以看出每个节点的初始层高会随着局部网格尺寸的变化而变化,且其值为 h0 = size * Aspect。

"Absolute": 0.1 // 取值范围:[eps,MaxSize]

GrowthRate

常量增长率,每一层的生长速率因子相同(下一层比上一层)。

"Constant": 1.5 // 取值范围:[1,2]

变量增长率,从第二层开始,每一层增长率独立(注意,第一层增长率恒为 0,且与层数匹配)。

"Variable":[0,1,1,2,2] //从第二层开始,取值范围:[1,2]

NLayers

NLayers:需要生成边界层的层数。

"NLayers": 5, //取值范围:[1,inf]

ProblematicAreasTreatment

如果由于局部几何特征而无法生长层,或者因为没有足够的空间来生长所要求的所有层,所采用的方法。为了显示不同方法下网格生成的效果,修改 EFPairs。

1.当边界层的生成没有按照预计参数进行时(遇到问题时),停止生成。

"ProblematicAreasTreatment": "STOP"

2.允许挤压层来克服交叉、接近或质量问题。

"ProblematicAreasTreatment": "SQUEEZE"

3.允许某些局部区域的折叠来克服交叉、接近或质量问题。

"ProblematicAreasTreatment": "COLLAPSE"

4.允许排除某些局部区域来克服交叉、接近或质量问题。

"ProblematicAreasTreatment": "EXCLUDE"

复杂 Json 模板

{
"BoundaryLayer":
[
{
"DistributionType": "Separation",
"EntityType": "Edge",
"EFPairs":
[
{
"E": 5,
"F": 1
},
{
"E": 6,
"F": 1
},
{
"E": 7,
"F": 1
},
{
"E": 8,
"F": 1
}
],
"Basic":
{
"InitLayerHeight":
{
"Absolute": 0.1 // "Absolute": xx/"Aspect": xx
},
"GrowthRate":
{
"Constant": 1.2 // "Constant": xx/"Variable":[xx,...,xx]
},
"NLayers": 6,
"AdditionalOuterLayers": 0,
"LastAspect": 0,
"ProblematicAreasTreatment": "COLLAPSE" // STOP/SQUEEZE/COLLAPSE/EXCLUDE
},
"SideTreatment":
{
"CollapseFreeEdges": false // true/false
},
"VectorTreatment":
{
"SmoothTopCapShellMesh": true, // true/false
"SmoothVectors": [true,90], // true-angle/false
"SeparateVectors": false, // true-angle/false
"SeparateNumber": 0
},
"GrowthControls":
{
"MiniFirstLayerHeight": 0, // only when SQUEEZE
"MaxLayerAspect": false, // true only when SQUEEZE, true-aspect/false
"ProximityCheckFactor": false, // true-factor/false
"MiniLayerAspect": false // only when ProximityCheckFactor true and SQUEEZE,ture-aspect/flase
}
}
],
"MeshSize": [
{
"GrowthRate": 1.0,
"MeshingDim": 2,
"SelectedEntities": []
}
],
"ThreadNum": 1
}


是否必需 取值范围 默认值 备注
BoundaryLayer-Basic AdditionalOuterLayers [0,inf] 0 额外层数,使得最后一层边界层与附近的单元尺寸匹配
BoundaryLayer-Basic LastAspect [eps,1] 0 额外层数非零值激活,最后一层宽高比
BoundaryLayer-SideTreatment CollapseFreeEdges true、false false 仅当为"COLLAPSE"激活时才有效,允许在自由边折叠
BoundaryLayer-VectorTreatment SmoothTopCapShellMesh true、false true 允许矢量从其原始法线位置移动;否则以正交方式生长
BoundaryLayer-VectorTreatment SmoothVectors true,[0,180]
false
[true,90] 与初始位置的最大允许角度偏差
BoundaryLayer-VectorTreatment SeparateVectors true,[eps,180]
false
false 在尖锐的边缘(用户指定角度两个面的夹角)分离边界层的矢量
BoundaryLayer-VectorTreatment SeparateNumber [0,inf] 0 在尖锐的边缘分离的矢量个数
BoundaryLayer-GrowthControls MiniFirstLayerHeight [0,inf] 0 仅当为"SQUEEZE"激活时才有效,允许的最小第一层网格高度,默认值(=0)时,最小为初始高度的5%
BoundaryLayer-GrowthControls MaxLayerAspect true,[eps,inf]
false
false 仅当为"SQUEEZE"激活时才有效,最大宽高比
BoundaryLayer-GrowthControls ProximityCheckFactor true,[eps,inf]
false
false 接近检查因子,控制两个相对的边界层区域之间的最小间隙
BoundaryLayer-GrowthControls-SQUEEZE MiniLayerAspect true,[eps,inf]
false
false 仅当"ProximityCheckFactor"激活且为"SQUEEZE"时才有效,最小长宽比

复杂配置说明

基础参数设置

"Basic":
{
"InitLayerHeight":
{
"Absolute": 0.1 // "Absolute": xx/"Aspect": xx
},
"GrowthRate":
{
"Constant": 1.5 // "Constant": xx/"Variable":[xx,...,xx]
},
"NLayers": 3,
"AdditionalOuterLayers": 2,
"LastAspect": 0.8,
"ProblematicAreasTreatment": "COLLAPSE" // STOP/SQUEEZE/COLLAPSE/EXCLUDE
}

AdditionalOuterLayers

AdditionalOuterLayers:额外添加的边界层数量,使得最后一层边界层与附近的三角形单元尺寸匹配,如果最后一层边界层尺寸大于附近的三角形单元尺寸,即使设置该参数,也会默认为 0。

"AdditionalOuterLayers": 2, // 取值范围:[0,inf],默认值为0

LastAspect

LastAspect:最后一层高宽比,当 AdditionalOuterLayers 不为 0 时才能设置该参数。

"LastAspect": 0.8, // 取值范围:[eps,1],默认值为0

对面 3 中的边 25 生成边界层网格,结果如下:

侧面处理选项

"SideTreatment":
{
"CollapseFreeEdges": false // 取值范围:{false,true},默认值为false
}

CollapseFreeEdges

允许在自由边折叠,当两个面的法向夹角大于一定值的时候,两个面交叉线附近的网格,使得网格层数量逐渐减少。
选择面 3 上的边 25 和边 26 生成边界层网格,以观察自由边折叠功能。

"CollapseFreeEdges": false
"CollapseFreeEdges": true

矢量处理选项

"VectorTreatment":
{
"SmoothTopCapShellMesh": true, // 取值范围:{false,true}
"SmoothVectors": [true,90], // 取值范围:{false,[true,[0,180°]]},默认值为[true,90]
"SeparateVectors": false, // 取值范围:{false,[true,[eps,180]]},默认值为false
"SeparateNumber": 0 // 取值范围:[0,inf],默认值为0
}

SmoothTopCapShellMesh

如果激活该选项,允许矢量从其原始法线位置移动;如果不激活,则层以正交方式生长。 允许这个操作可以生成更多层,因为网格在封闭区域“打开”得更多,但是可能导致质量较差(较少正交)的网格。
为了明显看出区别,调整边界层初始层高和厚度。

"SmoothTopCapShellMesh": false
"SmoothTopCapShellMesh": true

SmoothVectors

如果激活该选项,则用户指定与原始正常位置的最大允许角度偏差,允许这个操作可以生成更多层,因为网格在封闭区域“打开”得更多,但是可能导致质量较差(较少正交)的网格。

"SmoothVectors": [true,15]
"SmoothVectors": [true,45]

SeparateVectors,SeparateNumber

在尖锐的边缘(用户指定角度两个面的夹角)分离边界层的矢量,如果禁用此选项,则将不会拆分边界层。结果是一个连续的层网格围绕尖锐的边缘,但一些网格发生偏度(畸形)。如果启用此选项,则生成的网格具有更好的元素,但现在暴露的侧面将使用三角形网格。
为显示该功能的效果,对面 1 上的边 5 和边 6 生成边界层网格,由于边 5 和边 6 的夹角为 270 度,所以可以考虑在该处分离边界层矢量。

"SeparateVectors": false,
"SeparateNumber": 0
"SeparateVectors": [true,270],
"SeparateNumber": 1

增长控制

"GrowthControls":
{
"MiniFirstLayerHeight": 0, // 仅当SQUEEZE时激活,取值范围:[0,inf],默认值为初始层高的5%
"MaxLayerAspect": false, // 仅当SQUEEZE时激活,取值范围:{false,[true,[eps,inf]]},默认值为flase
"ProximityCheckFactor": false, // {false,[true,[eps,inf]]},默认值为false
"MiniLayerAspect": false // 仅当SQUEEZE,且接近因子为true时激活,取值范围:{false,[true,[eps.inf]]},默认值为false
}

MiniFirstLayerHeight

当挤压(squeeze)激活时,最允许的最小高度值,如果没有指定这个值(=0),那么第一层高度可能会压缩到初始高度的 5,然后转为 collapse 模式。

MaxLayerAspect

当挤压(squeeze)激活时,最小允许的图层高宽比,有时在小表面单元长度的区域以绝对模式生长层时,层可能过度生长。他们可能会变得非常高。指定最大层高宽比后,当达到允许的层宽高比后,继续保持层高不变生长。

ProximityCheckFactor

激活此选项以控制两个相对的边界层区域之间的最小间隙,定义边界层之间最小距离为接近检查因子乘以两个相对网格尺寸之和,如果用户想要确保边界层之间有足够的空间来生成高质量的三角形网格,这个选项很重要。
为显示该功能的效果,对面 1 上的边 5,6,7,8 生成边界层,由于边 8 生成的边界层可能和边 10 相交,所以选择 SQUEEZE 模式,同时可以设置该参数控制区域之间的最小间隙。

"ProximityCheckFactor": false
"ProximityCheckFactor": [true,0.1]

MiniLayerAspect

当挤压(squeeze)激活同时指定 ProximityCheckFactor 时,边界层允许的最小长宽比。如果指定 ProximityCheckFactor 时边界层的最小长宽比小于这个值,则边界层将压缩到允许的最小长宽比,然后转为 collapse 模式。

复杂配置示例 1

现在需要对边 5,6,7,8 向面 1 生成边界层网格,且希望在直角处能存在3个法向,所以 VectorTreatment 下的 SeparateVectors 设置为[true,270],SeparateNumber 设置为 2。对于按照该参数生成的边界层可能会与边 10 接触,所以问题区域处理方式选择折叠,即 COLLAPSE 模式。

{
"BoundaryLayer":
[
{
"DistributionType": "Separation",
"EntityType": "Edge",
"EFPairs":
[
{
"E": 5,
"F": 1
},
{
"E": 6,
"F": 1
},
{
"E": 7,
"F": 1
},
{
"E": 8,
"F": 1
}
],
"Basic":
{
"GrowthRate":
{
"Constant":1.2
},
"InitLayerHeight":
{
"Absolute": 0.01
},
"NLayers": 7,
"AdditionalOuterLayers": 3,
"LastAspect": 0.8,
"ProblematicAreasTreatment": "COLLAPSE"
},
"SideTreatment":
{
"CollapseFreeEdges": false
},
"VectorTreatment":
{
"SmoothTopCapShellMesh": true,
"SmoothVectors": [true,90],
"SeparateVectors": [true,270],
"SeparateNumber": 2
}
}
],
"MeshSize": [
{
"CurvatureFactor": 0.2,
"GrowthRate": 1.0,
"MaxSize": 0.5,
"MeshingDim": 2,
"MinSize": 0.1,
"SelectedEntities": []
}
],
"ThreadNum": 1
}

结果如下:

点击这里example02可获得二维边界层详细 JSON 示例完整源码,大家根据学习需要自行下载。