【发布时间】:2019-11-10 16:59:04
【问题描述】:
我正在为特定的流体问题编写 CFD 求解器。至此每次运行仿真都会生成网格,当改变几何形状和流体属性时,需要重新编译程序。
对于单元格数量少的小型问题,它工作得很好。但是对于超过 100 万个细胞的情况,并且需要经常更改流体属性,效率非常低。
显然,我们需要将模拟设置数据存储在配置文件中,并将几何信息存储在格式化的网格文件中。
- Simulation.config 文件
% Dimension: 2D or 3D
N_Dimension= 2
% Number of fluid phases
N_Phases= 1
% Fluid density (kg/m3)
Density_Phase1= 1000.0
Density_Phase2= 1.0
% Kinematic viscosity (m^2/s)
Viscosity_Phase1= 1e-6
Viscosity_Phase2= 1.48e-05
...
- Geometry.mesh 文件
% Dimension: 2D or 3D
N_Dimension= 2
% Points (index: x, y, z)
N_Points= 100
x0 y0
x1 y1
...
x99 y99
% Faces (Lines in 2D: P1->p2)
N_Faces= 55
0 2
3 4
...
% Cells (polygons in 2D: Cell-Type and Points clock-wise). 6: triangle; 9: quad
N_Cells= 20
9 0 1 6 20
9 1 3 4 7
...
% Boundary Faces (index)
Left_Faces= 4
0
1
2
3
Bottom_Faces= 6
7
8
9
10
11
12
...
将配置和网格信息写入格式化文本文件很容易。问题是,我们如何有效地将这些数据读入程序?我想知道是否有任何易于使用的 c++ 库来完成这项工作。
【问题讨论】:
-
由于您的输入是文本,因此没有有效的方法(或者非常有效的方法不适用)。例如,对于数字,它们必须被解析然后转换为内部格式。现在,如果你的文件是二进制格式,那效率会更高。
-
人类可读的数据格式有很多,例如 XML、HTML 和 INI。有库可以输入这些格式的数据;搜索互联网。
-
请不要重新发明轮子。使用现有文件格式而不是自定义文件格式。看看en.m.wikipedia.org/wiki/Polygon_mesh#File_Formats、hdfgroup.org/solutions/hdf5 和en.m.wikipedia.org/wiki/YAML。这些格式将提供用于存储和读取的库,并且通常比以往任何时候都更加努力地提高效率和容错能力。不要通过自己实施来放慢自己的速度......
-
只需使用 wavefront .obj 和许多可用于读取和写入该格式的库之一。解决您的问题,还允许您使用任何现成的 CAD 程序来构建您的模型。
-
@3Dave 入口、出口、墙壁等物理边界信息对于模拟非常重要,我敢打赌,一些现有的网格格式(obj、off、stl)不允许包含这些。跨度>
标签: c++ parsing config configuration-files mesh