gctl_mesh/doc/regular_mesh_2d.md
2025-01-13 09:15:55 +08:00

98 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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和二进制格式的文件操作