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

3.1 KiB

GCTL MeshData 文档

简介

meshdata.h 定义了GCTL网格库中的数据对象类 meshdata,用于在网格上存储和管理各种类型的数据(标量、矢量和张量)。

类型定义

数据值类型 (mesh_data_value_e)

enum mesh_data_value_e {
    Scalar,     // 标量数据
    Vector,     // 矢量数据
    Tensor      // 张量数据
};

类成员

属性

std::string name_;           // 数据的名称
mesh_data_type_e loctype_;   // 数据的赋值位置属性(顶点或元素)
mesh_data_value_e valtype_;  // 数据的类型(标量/矢量/张量)
bool output_ok_;             // 是否可输出数据
array<double> datval_;       // 数据值数组
double nan_val_;             // 无效数据的标记值

主要API

构造和初始化

// 默认构造函数
meshdata();

// 带参数构造函数
meshdata(mesh_data_type_e in_loctype,     // 数据位置类型
         mesh_data_value_e in_valtype,     // 数据值类型
         size_t size,                      // 数据大小
         std::string name = "untitled",    // 数据名称
         bool if_output = true,            // 是否可输出
         double nan_val = GCTL_BDL_MAX);   // 无效值标记

// 创建数据对象
void create(mesh_data_type_e in_loctype,   // 数据位置类型
           mesh_data_value_e in_valtype,   // 数据值类型
           size_t size,                    // 数据大小
           std::string name = "untitled",  // 数据名称
           bool if_output = true,          // 是否可输出
           double nan_val = GCTL_BDL_MAX); // 无效值标记

数据操作

// 清空数据对象
void clear();

// 导出矢量数据
array<point3dc> export_vector() const;

// 导出张量数据
array<tensor> export_tensor() const;

信息显示

// 显示数据对象的头信息
void show_info(std::ostream &os = std::clog) const;

// 显示数据统计参数
void show_stats(std::ostream &os = std::clog) const;

文件操作

// 载入二进制文件
void load_binary(std::ifstream &infile);

// 保存二进制文件
void save_binary(std::ofstream &outfile);

使用示例

// 创建数据对象
gctl::meshdata data(gctl::NodeData,        // 节点数据
                   gctl::Scalar,           // 标量类型
                   100,                    // 数据大小
                   "temperature",          // 数据名称
                   true);                  // 可输出

// 显示数据信息
data.show_info();

// 显示数据统计信息
data.show_stats();

// 导出矢量数据
if (data.valtype_ == gctl::Vector) {
    array<point3dc> vectors = data.export_vector();
}

// 导出张量数据
if (data.valtype_ == gctl::Tensor) {
    array<tensor> tensors = data.export_tensor();
}

注意事项

  1. 数据对象支持三种类型:标量、矢量和张量
  2. 数据可以定义在网格的顶点或元素上
  3. 数据导出时会根据数据类型自动转换为对应的格式
  4. 二进制文件操作通常由网格类调用,不建议直接使用