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

3.8 KiB
Raw Blame History

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