3.8 KiB
3.8 KiB
GCTL Mesh 基类文档
简介
mesh.h
定义了GCTL网格库的基础类 base_mesh
,这是所有具体网格类型的基类。它提供了网格操作的基本接口和功能实现。
类型定义
网格类型 (mesh_type_e)
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)
enum mesh_dim_e {
MESH_0D, // 0维网格
MESH_2D, // 2维网格
MESH_3D // 3维网格
};
主要API
基本操作
void clear(); // 清除所有网格数据
bool initiated() const; // 检查网格是否已初始化
void show_info(); // 显示网格与数据信息
网格信息获取
mesh_type_e get_meshtype() const; // 获取网格类型
mesh_dim_e get_meshdim() const; // 获取网格维度
int get_nodenum() const; // 获取顶点数量
int get_elenum() const; // 获取网格单元数量
int get_datanum() const; // 获取数据对象数量
网格属性设置
std::string get_meshname() const; // 获取网格名称
void set_meshname(std::string in_name); // 设置网格名称
std::string get_meshinfo() const; // 获取网格说明信息
void set_meshinfo(std::string in_info); // 设置网格说明信息
数据操作
// 添加网格数据(标量初始值)
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);
文件操作
// 保存为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;
使用示例
// 创建网格对象(以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);