116 lines
3.8 KiB
Markdown
116 lines
3.8 KiB
Markdown
# GCTL Mesh 基类文档
|
||
|
||
## 简介
|
||
|
||
`mesh.h` 定义了GCTL网格库的基础类 `base_mesh`,这是所有具体网格类型的基类。它提供了网格操作的基本接口和功能实现。
|
||
|
||
## 类型定义
|
||
|
||
### 网格类型 (mesh_type_e)
|
||
```cpp
|
||
enum mesh_type_e {
|
||
UNDEFINED, // 未定义网格
|
||
REGULAR_MESH, // 规则网格
|
||
LINEAR_MESH, // 线性网格
|
||
TRI_TET_MESH, // 三角形/四面体网格
|
||
REGULAR_MESH_SPH, // 球面规则网格
|
||
LINEAR_MESH_SPH, // 球面线性网格
|
||
TRI_TET_MESH_SPH, // 球面三角形/四面体网格
|
||
REGULAR_GRID, // 规则网格
|
||
};
|
||
```
|
||
|
||
### 网格维度 (mesh_dim_e)
|
||
```cpp
|
||
enum mesh_dim_e {
|
||
MESH_0D, // 0维网格
|
||
MESH_2D, // 2维网格
|
||
MESH_3D // 3维网格
|
||
};
|
||
```
|
||
|
||
## 主要API
|
||
|
||
### 基本操作
|
||
```cpp
|
||
void clear(); // 清除所有网格数据
|
||
bool initiated() const; // 检查网格是否已初始化
|
||
void show_info(); // 显示网格与数据信息
|
||
```
|
||
|
||
### 网格信息获取
|
||
```cpp
|
||
mesh_type_e get_meshtype() const; // 获取网格类型
|
||
mesh_dim_e get_meshdim() const; // 获取网格维度
|
||
int get_nodenum() const; // 获取顶点数量
|
||
int get_elenum() const; // 获取网格单元数量
|
||
int get_datanum() const; // 获取数据对象数量
|
||
```
|
||
|
||
### 网格属性设置
|
||
```cpp
|
||
std::string get_meshname() const; // 获取网格名称
|
||
void set_meshname(std::string in_name); // 设置网格名称
|
||
std::string get_meshinfo() const; // 获取网格说明信息
|
||
void set_meshinfo(std::string in_info); // 设置网格说明信息
|
||
```
|
||
|
||
### 数据操作
|
||
```cpp
|
||
// 添加网格数据(标量初始值)
|
||
meshdata &add_data(mesh_data_type_e in_loctype, // 数据位置类型
|
||
mesh_data_value_e in_valtype, // 数据值类型
|
||
std::string name, // 数据名称
|
||
double init_val, // 初始值
|
||
bool if_output = true); // 是否可输出
|
||
|
||
// 添加网格数据(数组初始值)
|
||
meshdata &add_data(mesh_data_type_e in_loctype, // 数据位置类型
|
||
std::string name, // 数据名称
|
||
const array<double> &init_arr, // 初始值数组
|
||
bool if_output = true); // 是否可输出
|
||
|
||
// 获取数据对象
|
||
meshdata &get_data(std::string datname);
|
||
|
||
// 删除数据对象
|
||
void remove_data(std::string datname);
|
||
```
|
||
|
||
### 文件操作
|
||
```cpp
|
||
// 保存为Gmsh格式(含数据)
|
||
void save_gmsh_withdata(std::string filename, // 文件名
|
||
output_type_e out_mode, // 输出模式
|
||
index_packed_e packed = Packed); // 索引打包方式
|
||
|
||
// 保存为Gmsh格式(指定数据)
|
||
void save_gmsh_withdata(std::string filename, // 文件名
|
||
std::string datname, // 数据名称
|
||
output_type_e out_mode, // 输出模式
|
||
index_packed_e packed = Packed); // 索引打包方式
|
||
|
||
// 纯虚函数 - 需要由派生类实现
|
||
virtual void save_gmsh(std::string filename,
|
||
index_packed_e packed = Packed) = 0;
|
||
virtual void load_binary(std::string filename) = 0;
|
||
virtual void save_binary(std::string filename) = 0;
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
```cpp
|
||
// 创建网格对象(以regular_grid为例)
|
||
gctl::regular_grid rgd;
|
||
rgd.init("grid-1", "test grid", 4, 4, 0.0, 0.0, 1.0, 1.0);
|
||
|
||
// 添加数据
|
||
rgd.add_data(gctl::NodeData, gctl::Scalar, "temperature", 25.0);
|
||
rgd.add_data(gctl::ElemData, gctl::Vector, "velocity", velocity_array);
|
||
|
||
// 显示网格信息
|
||
rgd.show_info();
|
||
|
||
// 保存网格
|
||
rgd.save_gmsh_withdata("output.msh", gctl::OverWrite);
|
||
``` |