Appearance
第 5 章:Tools 节、QualityReport 节与 Structured 节
Tools 节
Tools 节用于对边界文件或网格文件执行几何操作。输入网格可以是四面体网格或混合(混合单元)网格。
注意:
- 操作按照它们在 Tools 节中的顺序执行。一个操作的输出成为下一个操作的输入。
- 要使用 Tools 节,在命令文件的 IOControls 节中指定
EnableTools。- 如果同时指定了 Tensor 节,则 Tensor 节优先,Tools 节被忽略。
追加输入结构(Append)
周期性地在指定位置追加输入结构:
Tools {
Append {
axis = xmin | ymin | zmin | xmax | ymax | zmax
map "stringA" = "stringB"
}
}此操作仅适用于 2D 和 3D 边界。
创建分布(CreateProfiles)
根据命令文件中的描述在输入网格中创建分布:
Tools {
CreateProfiles {
SrcMesh = "string"
CmdFile = "string"
}
}在此过程中网格不会被修改,因为命令文件中的细化规范被忽略。
界面粒子生成(ParticleGenerator)
在 3D brep 的所有界面平面(位于外部边界上的界面平面除外)上生成具有指定最小间距的点云:
Tools {
ParticleGenerator {
brepIn = "string"
minSpacing = float
pointCloud = float
trapDensity = float
}
}参数说明:
- brepIn — 粒状 brep 的输入文件,每个晶粒属于独立的 region。此文件通常由 Neper 或 Tools 节的 Voronoi 子节生成。
- minSpacing — 约束任意两个陷阱位点之间的最小距离(微米)。默认 0。
- pointCloud — 输出文件名(.txt 格式)。
- trapDensity — 陷阱的面密度(cm⁻²)。默认 0。
Wire 上粒子生成(WireTrapGenerator)
在线状结构周围生成遵循高斯分布的点云:
Tools {
WireTrapGenerator {
wireBrep = "string"
gridSize = float
trapFileName = "string"
resinRegion = "string"
WireParams "string" {
wireRegion = "string"
stddev = "double"
}
}
}参数说明:
- wireBrep — 输入 brep 文件,必须包含作为独立区域的 wire(WireParams 中的 wireRegion)和有效的 resinRegion。
- gridSize — 在 resin 区域内生成点网格的网格大小。值越小,点越密。
- trapFileName — 输出文件名(.txt 格式),包含有效陷阱位置。
- resinRegion — 感兴趣的区域,在其中生成陷阱位点。
- WireParams — 存储 wire 信息,用于在网格点中选择有效的陷阱位置。
设置变换(Set Transformation)
对网格或边界设置变换矩阵:
Tools {
Set Transformation {
translation = (float float [float])
scale = float | (float float float)
rotation {
axis = (float float float)
angle = float
} | rotation {
matrix (float float float float float float float float float)
}
}
Apply Transformation
}移除短特征(Decimate)
移除边界中不需要的短特征:
Tools {
Decimate {
accuracy = float
shortedge = float
}
}- accuracy — 结构偏离其原始位置的偏差。默认 1e-8。
- shortedge — 移除短边。所有短于此值的边都被消除。
使用 DelPSC 算法重新离散化边界
使用 DelPSC 算法通过曲面重网格化来重新离散化边界:
Tools {
DelaunaySurfaceRemeshing {
DelPSCAccuracy = float
DelPSCRidgeAngle = float
DelPSCRidgeSampling = float
}
}- DelPSCAccuracy — 新曲面与原始曲面之间的允许偏差(微米)。
- DelPSCRidgeAngle — 在每个边处计算的角度(共享面的二面角)。默认 95°。
- DelPSCRidgeSampling — 离散化山脊和小三角形的大小(微米)。默认 0.01 µm。
使用双重轮廓算法重新离散化边界
Tools {
DualContouringSurface {
decimation = true | false
minAngle = float
minCutLength = float
minDihedralAngle = float
minDualEdgeLengthFactor = float
minPrimalSubedgeLengthFactor = float
resolution = float
smoothing = true | false
snapBoundaryToBox = integer
}
}参数说明:
- decimation — 应用后处理算法以减少输出表面的顶点数。默认 false。
- minAngle — 输出表面上的最小允许表面角(度)。默认 1°。
- minCutLength — 原始边上连续切割之间的最小长度(微米)。默认 1e-6。
- minDihedralAngle — 输出表面上的最小允许二面角(度)。默认 5°。
- resolution — 用于重建的原始网格(八叉树网格)的最小间距(微米)。
使用体积双重轮廓算法生成体积多面体网格
Tools {
DualContouringVolume {
resolution = float
}
}此算法是实验性的,不适用于需要高质量网格的应用(例如力学)。
网格间插值(InterpolateMesh)
从源网格到目标网格的插值:
Tools {
InterpolateMesh {
Conservative
DstMesh = "string"
Extrapolate = true | false
IgnoreMaterials
Species {"string" "string" ...}
SrcMesh = "string"
Tolerance = float
}
}- Conservative — 使用二阶方法执行插值。
- Extrapolate — 当源网格和目标网格边界不完全重合时是否外推。
- IgnoreMaterials — 忽略 material 匹配限制。
- Species — 指定要插值的种类。
2D 切片(Slice)
对 3D 网格或边界执行 2D 切片:
Tools {
Slice {
location = (float float float)
normal = (float float float)
} | Slice {
Direction = X | Y | Z
Endpoint = (float float)
Startpoint = (float float)
}
}平面切割(Cut)
用平面切割网格:
Tools {
Cut {
normal = (float float float)
location = (float float float)
}
}平面法线指向的一侧被移除。
反射(Reflection)
关于某个位置镜像网格并追加到原始网格:
Tools {
Reflection {
axis = xmin | ymin | zmin | xmax | ymax | zmax
map "stringA" = "stringB"
}
}拉伸(Extrude)
将平面 2D 网格沿非均匀 1D 网格拉伸生成 3D 网格:
Tools {
Extrude {
spacingMethod = even | regular | smooth
zCuts = (float) | ((float float) ...) | ((float float boolean) ...)
}
}或者:
Tools {
Extrude {
extension = float
steps = integer
}
}spacingMethod — 指定生成相邻平面对之间切割序列的进展类型:even(均匀)、regular(规则)、smooth(平滑渐变)。
生成 Voronoi 图(Voronoi)
Tools {
Voronoi {
AllRegions
region = "string"
scale = float
}
}- AllRegions — 将每个 region 转换为独立的 Voronoi cell。
- region — 指定要转换为 Voronoi cell 的 region。
- scale — 指定缩放因子。
QualityReport 节
本节指定要报告的网格质量统计信息和网格质量标准的限制:
QualityReport {
areaRatio = float
aspectRatio = true | false
aspectRatio = float
compactness = float
compactness = true | false
dihedralAngle = float
maxAngle = float
maxEdgeRatio = true | false
maxEdgeRatio = float
maxElementCount = integer
minAngle = float
minEdgeLength = true | false
minEdgeLength = float
outOfVolume = float
quality = float
quality = true | false
skewness = float
skewness = true | false
taper = float
taper = true | false
volumeRatio = float
}参数说明:
- areaRatio — 限制三角形面积与参考面积的最大允许比率。
- aspectRatio — 启用并设置最大允许长宽比。
- compactness — 单元致密性度量。
- dihedralAngle — 最小允许二面角(度)。
- maxAngle — 最大允许角度(度)。
- maxEdgeRatio — 限制相邻边之间的最大长度比。
- maxElementCount — 网格中允许的最大单元数。
- minAngle — 最小允许角度(度)。
- minEdgeLength — 最小允许边长。
- outOfVolume — 允许的最大体积偏差。
- quality — 启用网格质量报告。
- skewness — 单元偏斜度限制。
- taper — 锥度限制。
- volumeRatio — 体积比限制。
Structured 节
本节指定定义 Josephson 结网格所需的参数:
Structured {
Josephson {
interfaceRegion = "string"
junctionRegion = "string"
MeshResolution = float
NormalDirection = (float float float)
Thickness = float
}
}参数说明:
- interfaceRegion — Josephson 结界面所在的 region 名称。
- junctionRegion — Josephson 结所在的 region 名称。
- MeshResolution — 网格分辨率(微米)。
- NormalDirection — 界面法线方向向量。
- Thickness — 结厚度(微米)。
参考文献
[1] M. Grade, S.-cell: Object Oriented Finite Element Mesh Generator, Tech. Rep. 1, Berlin, Germany: Conrad Technologies, 1998.
[2] M. Grade, "A Parallel Grid Generation and Instantiation Algorithm for the Simulation of Large-area PDhm Solarcells," in Proc. Int. Meshing Roundtable, 1999.
[3] M. Bern, D. Eppstein, and J. Erickson, "Flipping Cubical Meshes," Engineering with Computers, vol. 18, pp. 173–187, 2002.
[4] T. K. Dey and J. A. Levine, "Delaunay Mesh Generation," CRC Press, 2013.
[5] J.-K. Kim, H.-Y. Shin, and Y.-H. Kim, "A Primal/Dual Mesh Generation with Plannar Domains," Engineering with Computers, vol. 29, pp. 195–206, 2013.
[6] Neper website: http://neper.sourceforge.net/
[7] V. L. H. Ng, "Second-Order Conservative remapping scheme for unstructured finite-element meshes," Monthly Weather Review, vol. 131, pp. 2065–2071, 2003.