114 lines
3.7 KiB
Markdown
114 lines
3.7 KiB
Markdown
|
# GCTL Regular Grid 文档
|
|||
|
|
|||
|
## 简介
|
|||
|
|
|||
|
`regular_grid.h` 定义了GCTL网格库中的规则网格类 `regular_grid`,用于创建和管理规则网格。规则网格是最基本的网格类型,具有规则的网格点分布和单元结构。
|
|||
|
|
|||
|
## 类继承
|
|||
|
|
|||
|
`regular_grid` 继承自 `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); // 终止点坐标
|
|||
|
|
|||
|
// 初始化三维规则网格
|
|||
|
void init(std::string name, // 网格名称
|
|||
|
std::string info, // 网格信息
|
|||
|
int nx, int ny, int nz, // x、y和z方向的网格数
|
|||
|
double x0, double y0, double z0, // 起始点坐标
|
|||
|
double x1, double y1, double z1); // 终止点坐标
|
|||
|
```
|
|||
|
|
|||
|
### 网格信息
|
|||
|
```cpp
|
|||
|
// 获取网格维度
|
|||
|
int get_dimension() const;
|
|||
|
|
|||
|
// 获取网格点数
|
|||
|
void get_grid_num(int &nx, int &ny) const; // 2D
|
|||
|
void get_grid_num(int &nx, int &ny, int &nz) const; // 3D
|
|||
|
|
|||
|
// 获取网格范围
|
|||
|
void get_grid_range(double &x0, double &y0, // 2D起点
|
|||
|
double &x1, double &y1) const; // 2D终点
|
|||
|
void get_grid_range(double &x0, double &y0, double &z0, // 3D起点
|
|||
|
double &x1, double &y1, double &z1) const; // 3D终点
|
|||
|
```
|
|||
|
|
|||
|
### 网格操作
|
|||
|
```cpp
|
|||
|
// 获取指定位置的网格点坐标
|
|||
|
void get_node_coord(int i, int j, // 2D索引
|
|||
|
double &x, double &y) const;
|
|||
|
void get_node_coord(int i, int j, int k, // 3D索引
|
|||
|
double &x, double &y, double &z) const;
|
|||
|
|
|||
|
// 获取指定位置的单元中心坐标
|
|||
|
void get_elem_center(int i, int j, // 2D索引
|
|||
|
double &x, double &y) const;
|
|||
|
void get_elem_center(int i, int j, int k, // 3D索引
|
|||
|
double &x, double &y, double &z) 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;
|
|||
|
|
|||
|
// NetCDF格式操作
|
|||
|
void load_netcdf_grid(std::string filename,
|
|||
|
mesh_data_type_e loctype,
|
|||
|
std::string xname,
|
|||
|
std::string yname);
|
|||
|
|
|||
|
void save_netcdf_grid(std::string filename,
|
|||
|
std::string title = "untitled");
|
|||
|
```
|
|||
|
|
|||
|
## 使用示例
|
|||
|
|
|||
|
```cpp
|
|||
|
// 创建2D规则网格
|
|||
|
gctl::regular_grid grid2d;
|
|||
|
grid2d.init("grid2d", "2D regular grid",
|
|||
|
100, 100, // 100x100网格
|
|||
|
0.0, 0.0, // 起点(0,0)
|
|||
|
1.0, 1.0); // 终点(1,1)
|
|||
|
|
|||
|
// 创建3D规则网格
|
|||
|
gctl::regular_grid grid3d;
|
|||
|
grid3d.init("grid3d", "3D regular grid",
|
|||
|
50, 50, 50, // 50x50x50网格
|
|||
|
0.0, 0.0, 0.0, // 起点(0,0,0)
|
|||
|
1.0, 1.0, 1.0); // 终点(1,1,1)
|
|||
|
|
|||
|
// 获取网格信息
|
|||
|
int nx, ny, nz;
|
|||
|
grid3d.get_grid_num(nx, ny, nz);
|
|||
|
|
|||
|
// 添加数据并保存
|
|||
|
grid3d.add_data(gctl::NodeData, gctl::Scalar, "temperature", 25.0);
|
|||
|
grid3d.save_gmsh("output.msh", gctl::Packed);
|
|||
|
```
|
|||
|
|
|||
|
## 注意事项
|
|||
|
|
|||
|
1. 规则网格支持2D和3D两种维度
|
|||
|
2. 网格点和单元的编号是规则的,可以通过索引直接访问
|
|||
|
3. 支持多种文件格式的导入导出(Gmsh、二进制、NetCDF)
|
|||
|
4. 网格范围由起点和终点坐标定义,网格间距自动计算
|