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

2.9 KiB
Raw Blame History

GCTL Regular Mesh 2D 文档

简介

regular_mesh_2d.h 定义了GCTL网格库中的二维规则网格类 regular_mesh_2d,用于创建和管理二维结构化网格。与regular_grid相比,该类更专注于二维网格的处理,提供了更多针对二维网格的专门操作。

类继承

regular_mesh_2d 继承自 base_mesh 基类,实现了所有虚函数,并添加了二维规则网格特有的功能。

主要API

初始化

// 初始化二维规则网格
void init(std::string name,          // 网格名称
          std::string info,          // 网格信息
          int nx, int ny,            // x和y方向的网格数
          double x0, double y0,      // 起始点坐标
          double x1, double y1,      // 终止点坐标
          double dx = 0.0,           // x方向网格间距0表示自动计算
          double dy = 0.0);          // y方向网格间距0表示自动计算

网格信息

// 获取网格点数
void get_mesh_num(int &nx, int &ny) const;

// 获取网格范围
void get_mesh_range(double &x0, double &y0,    // 起点坐标
                   double &x1, double &y1) const; // 终点坐标

// 获取网格间距
void get_mesh_step(double &dx, double &dy) const;

网格操作

// 获取指定位置的网格点坐标
void get_node_coord(int i, int j,          // 节点索引
                   double &x, double &y) const;

// 获取指定位置的单元中心坐标
void get_elem_center(int i, int j,         // 单元索引
                    double &x, double &y) const;

// 获取指定坐标所在的网格单元索引
bool get_elem_index(double x, double y,    // 坐标
                   int &i, int &j) const;  // 返回单元索引

文件操作

// 保存为Gmsh格式
virtual void save_gmsh(std::string filename,
                      index_packed_e packed = Packed) override;

// 保存为二进制格式
virtual void save_binary(std::string filename) override;

// 读取二进制格式
virtual void load_binary(std::string filename) override;

使用示例

// 创建二维规则网格
gctl::regular_mesh_2d mesh2d;
mesh2d.init("mesh2d", "2D regular mesh",
            100, 100,           // 100x100网格
            0.0, 0.0,          // 起点(0,0)
            1.0, 1.0);         // 终点(1,1)

// 获取网格信息
int nx, ny;
mesh2d.get_mesh_num(nx, ny);

double dx, dy;
mesh2d.get_mesh_step(dx, dy);

// 获取特定位置的坐标
double x, y;
mesh2d.get_node_coord(50, 50, x, y);  // 获取中心点坐标

// 添加数据并保存
mesh2d.add_data(gctl::NodeData, gctl::Scalar, "elevation", 0.0);
mesh2d.save_gmsh("terrain.msh", gctl::Packed);

注意事项

  1. 网格间距可以自动计算或手动指定
  2. 提供了坐标与网格索引之间的转换功能
  3. 所有索引都是从0开始计数
  4. 网格点和单元的编号是规则的,遵循行优先顺序
  5. 支持Gmsh和二进制格式的文件操作