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);
|
|||
|
```
|