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