98 lines
2.9 KiB
Markdown
98 lines
2.9 KiB
Markdown
# GCTL Regular Mesh 2D 文档
|
||
|
||
## 简介
|
||
|
||
`regular_mesh_2d.h` 定义了GCTL网格库中的二维规则网格类 `regular_mesh_2d`,用于创建和管理二维结构化网格。与`regular_grid`相比,该类更专注于二维网格的处理,提供了更多针对二维网格的专门操作。
|
||
|
||
## 类继承
|
||
|
||
`regular_mesh_2d` 继承自 `base_mesh` 基类,实现了所有虚函数,并添加了二维规则网格特有的功能。
|
||
|
||
## 主要API
|
||
|
||
### 初始化
|
||
```cpp
|
||
// 初始化二维规则网格
|
||
void init(std::string name, // 网格名称
|
||
std::string info, // 网格信息
|
||
int nx, int ny, // x和y方向的网格数
|
||
double x0, double y0, // 起始点坐标
|
||
double x1, double y1, // 终止点坐标
|
||
double dx = 0.0, // x方向网格间距(0表示自动计算)
|
||
double dy = 0.0); // y方向网格间距(0表示自动计算)
|
||
```
|
||
|
||
### 网格信息
|
||
```cpp
|
||
// 获取网格点数
|
||
void get_mesh_num(int &nx, int &ny) const;
|
||
|
||
// 获取网格范围
|
||
void get_mesh_range(double &x0, double &y0, // 起点坐标
|
||
double &x1, double &y1) const; // 终点坐标
|
||
|
||
// 获取网格间距
|
||
void get_mesh_step(double &dx, double &dy) const;
|
||
```
|
||
|
||
### 网格操作
|
||
```cpp
|
||
// 获取指定位置的网格点坐标
|
||
void get_node_coord(int i, int j, // 节点索引
|
||
double &x, double &y) const;
|
||
|
||
// 获取指定位置的单元中心坐标
|
||
void get_elem_center(int i, int j, // 单元索引
|
||
double &x, double &y) const;
|
||
|
||
// 获取指定坐标所在的网格单元索引
|
||
bool get_elem_index(double x, double y, // 坐标
|
||
int &i, int &j) const; // 返回单元索引
|
||
```
|
||
|
||
### 文件操作
|
||
```cpp
|
||
// 保存为Gmsh格式
|
||
virtual void save_gmsh(std::string filename,
|
||
index_packed_e packed = Packed) override;
|
||
|
||
// 保存为二进制格式
|
||
virtual void save_binary(std::string filename) override;
|
||
|
||
// 读取二进制格式
|
||
virtual void load_binary(std::string filename) override;
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
```cpp
|
||
// 创建二维规则网格
|
||
gctl::regular_mesh_2d mesh2d;
|
||
mesh2d.init("mesh2d", "2D regular mesh",
|
||
100, 100, // 100x100网格
|
||
0.0, 0.0, // 起点(0,0)
|
||
1.0, 1.0); // 终点(1,1)
|
||
|
||
// 获取网格信息
|
||
int nx, ny;
|
||
mesh2d.get_mesh_num(nx, ny);
|
||
|
||
double dx, dy;
|
||
mesh2d.get_mesh_step(dx, dy);
|
||
|
||
// 获取特定位置的坐标
|
||
double x, y;
|
||
mesh2d.get_node_coord(50, 50, x, y); // 获取中心点坐标
|
||
|
||
// 添加数据并保存
|
||
mesh2d.add_data(gctl::NodeData, gctl::Scalar, "elevation", 0.0);
|
||
mesh2d.save_gmsh("terrain.msh", gctl::Packed);
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 网格间距可以自动计算或手动指定
|
||
2. 提供了坐标与网格索引之间的转换功能
|
||
3. 所有索引都是从0开始计数
|
||
4. 网格点和单元的编号是规则的,遵循行优先顺序
|
||
5. 支持Gmsh和二进制格式的文件操作 |