116 lines
3.1 KiB
Markdown
116 lines
3.1 KiB
Markdown
# GCTL MeshData 文档
|
|
|
|
## 简介
|
|
|
|
`meshdata.h` 定义了GCTL网格库中的数据对象类 `meshdata`,用于在网格上存储和管理各种类型的数据(标量、矢量和张量)。
|
|
|
|
## 类型定义
|
|
|
|
### 数据值类型 (mesh_data_value_e)
|
|
```cpp
|
|
enum mesh_data_value_e {
|
|
Scalar, // 标量数据
|
|
Vector, // 矢量数据
|
|
Tensor // 张量数据
|
|
};
|
|
```
|
|
|
|
## 类成员
|
|
|
|
### 属性
|
|
```cpp
|
|
std::string name_; // 数据的名称
|
|
mesh_data_type_e loctype_; // 数据的赋值位置属性(顶点或元素)
|
|
mesh_data_value_e valtype_; // 数据的类型(标量/矢量/张量)
|
|
bool output_ok_; // 是否可输出数据
|
|
array<double> datval_; // 数据值数组
|
|
double nan_val_; // 无效数据的标记值
|
|
```
|
|
|
|
## 主要API
|
|
|
|
### 构造和初始化
|
|
```cpp
|
|
// 默认构造函数
|
|
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); // 无效值标记
|
|
```
|
|
|
|
### 数据操作
|
|
```cpp
|
|
// 清空数据对象
|
|
void clear();
|
|
|
|
// 导出矢量数据
|
|
array<point3dc> export_vector() const;
|
|
|
|
// 导出张量数据
|
|
array<tensor> export_tensor() const;
|
|
```
|
|
|
|
### 信息显示
|
|
```cpp
|
|
// 显示数据对象的头信息
|
|
void show_info(std::ostream &os = std::clog) const;
|
|
|
|
// 显示数据统计参数
|
|
void show_stats(std::ostream &os = std::clog) const;
|
|
```
|
|
|
|
### 文件操作
|
|
```cpp
|
|
// 载入二进制文件
|
|
void load_binary(std::ifstream &infile);
|
|
|
|
// 保存二进制文件
|
|
void save_binary(std::ofstream &outfile);
|
|
```
|
|
|
|
## 使用示例
|
|
|
|
```cpp
|
|
// 创建数据对象
|
|
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. 二进制文件操作通常由网格类调用,不建议直接使用 |