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

116 lines
3.8 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 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);
```