2025-01-13 00:10:04 +08:00
|
|
|
|

|
|
|
|
|
|
|
|
|
|
# GCTL Mesh Library
|
|
|
|
|
|
|
|
|
|
GCTL Mesh是地球物理计算工具库(Geophysical Computational Tools & Library)的网格处理模块,提供了多种类型的网格实现和操作功能。
|
|
|
|
|
|
|
|
|
|
## 功能特点
|
|
|
|
|
|
|
|
|
|
- 支持多种网格类型的创建和操作
|
|
|
|
|
- 提供2D和3D网格的实现
|
|
|
|
|
- 包含规则网格和非规则网格的处理
|
|
|
|
|
- 支持球面网格的处理
|
|
|
|
|
- 支持网格数据的导入导出(包括Gmsh格式和二进制格式)
|
|
|
|
|
- 支持标量、矢量和张量数据的处理
|
|
|
|
|
|
|
|
|
|
## 主要组件
|
|
|
|
|
|
|
|
|
|
### 基础网格类型
|
|
|
|
|
- `mesh.h`: 网格基类,定义了基本的网格接口和功能
|
|
|
|
|
- `meshdata.h`: 网格数据结构的定义和处理
|
|
|
|
|
|
|
|
|
|
### 规则网格
|
|
|
|
|
- `regular_grid`: 通用规则网格实现
|
|
|
|
|
- `regular_mesh_2d`: 二维规则网格
|
|
|
|
|
- `regular_mesh_3d`: 三维规则网格
|
|
|
|
|
- `regular_mesh_sph_3d`: 三维球面规则网格
|
|
|
|
|
|
|
|
|
|
### 线性网格
|
|
|
|
|
- `linear_mesh_2d`: 二维线性网格
|
|
|
|
|
- `linear_mesh_3d`: 三维线性网格
|
|
|
|
|
|
|
|
|
|
### 非规则网格
|
|
|
|
|
- `tri_mesh`: 三角形网格
|
|
|
|
|
- `tet_mesh`: 四面体网格
|
|
|
|
|
|
|
|
|
|
## 核心功能
|
|
|
|
|
|
|
|
|
|
### 网格数据管理
|
|
|
|
|
- 支持在顶点或单元上定义数据
|
|
|
|
|
- 支持三种数据类型:
|
|
|
|
|
- 标量数据 (Scalar)
|
|
|
|
|
- 矢量数据 (Vector)
|
|
|
|
|
- 张量数据 (Tensor)
|
|
|
|
|
- 数据操作功能:
|
|
|
|
|
- 添加/删除数据
|
|
|
|
|
- 数据导入导出
|
|
|
|
|
- 数据统计分析
|
|
|
|
|
|
|
|
|
|
### 网格操作
|
|
|
|
|
- 网格初始化和清理
|
|
|
|
|
- 网格信息查询(节点数、单元数等)
|
|
|
|
|
- 网格文件导入导出
|
|
|
|
|
- 支持Gmsh格式
|
|
|
|
|
- 支持二进制格式
|
|
|
|
|
- 网格数据可视化输出
|
|
|
|
|
|
|
|
|
|
### 网格类型
|
|
|
|
|
支持的网格维度:
|
|
|
|
|
- 0D网格 (MESH_0D)
|
|
|
|
|
- 2D网格 (MESH_2D)
|
|
|
|
|
- 3D网格 (MESH_3D)
|
|
|
|
|
|
|
|
|
|
支持的网格类别:
|
|
|
|
|
- 规则网格 (REGULAR_MESH)
|
|
|
|
|
- 线性网格 (LINEAR_MESH)
|
|
|
|
|
- 三角形/四面体网格 (TRI_TET_MESH)
|
|
|
|
|
- 球面规则网格 (REGULAR_MESH_SPH)
|
|
|
|
|
- 球面线性网格 (LINEAR_MESH_SPH)
|
|
|
|
|
- 球面三角形/四面体网格 (TRI_TET_MESH_SPH)
|
|
|
|
|
- 规则网格 (REGULAR_GRID)
|
|
|
|
|
|
|
|
|
|
## API示例
|
|
|
|
|
|
|
|
|
|
### 数据操作
|
|
|
|
|
```cpp
|
|
|
|
|
// 添加数据
|
|
|
|
|
meshdata &add_data(mesh_data_type_e type, // 数据位置类型(顶点/单元)
|
|
|
|
|
mesh_data_value_e valtype, // 数据值类型(标量/矢量/张量)
|
|
|
|
|
string name, // 数据名称
|
|
|
|
|
double init_val, // 初始值
|
|
|
|
|
bool if_output = true); // 是否可输出
|
|
|
|
|
|
|
|
|
|
// 获取数据
|
|
|
|
|
meshdata &get_data(string datname);
|
|
|
|
|
|
|
|
|
|
// 删除数据
|
|
|
|
|
void remove_data(string datname);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 文件操作
|
|
|
|
|
```cpp
|
|
|
|
|
// 保存为Gmsh格式(含数据)
|
|
|
|
|
void save_gmsh_withdata(string filename,
|
|
|
|
|
output_type_e out_mode,
|
|
|
|
|
index_packed_e packed = Packed);
|
|
|
|
|
|
|
|
|
|
// 保存为二进制格式
|
|
|
|
|
void save_binary(string filename);
|
|
|
|
|
|
|
|
|
|
// 读取二进制格式
|
|
|
|
|
void load_binary(string filename);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 许可证
|
|
|
|
|
|
|
|
|
|
该项目采用双重许可证方案:
|
|
|
|
|
1. GNU Lesser General Public License v2或更高版本
|
|
|
|
|
2. 商业许可证(需单独申请)
|
|
|
|
|
|
|
|
|
|
## 联系方式
|
|
|
|
|
|
|
|
|
|
作者:Yi Zhang (yizhang-geo@zju.edu.cn)
|
|
|
|
|
|
|
|
|
|
## 版权声明
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2023 Yi Zhang
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
库提供了多个完整的示例程序,展示了不同功能的使用方法:
|
|
|
|
|
|
|
|
|
|
### 基础网格操作
|
|
|
|
|
```cpp
|
|
|
|
|
// mesh_ex1.cpp - 基础网格创建和数据操作
|
|
|
|
|
gctl::regular_grid rgd;
|
|
|
|
|
rgd.init("grid-1", "null", 4, 4, 0.0, 0.0, 1.0, 1.0); // 创建4x4网格
|
|
|
|
|
rgd.add_data(gctl::NodeData, gctl::Scalar, "data-1", 2.5); // 添加节点数据
|
|
|
|
|
rgd.add_data(gctl::ElemData, gctl::Scalar, "data-2", 1.2); // 添加单元数据
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 文件导入导出
|
|
|
|
|
```cpp
|
|
|
|
|
// mesh_ex5.cpp - NetCDF格式文件操作
|
|
|
|
|
gctl::regular_grid rgd;
|
|
|
|
|
rgd.load_netcdf_grid("data/input.nc", gctl::ElemData, "x", "y"); // 读取网格
|
|
|
|
|
rgd.save_netcdf_grid("data/output.nc", "example"); // 保存网格
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 球面网格处理
|
|
|
|
|
```cpp
|
|
|
|
|
// mesh_ex10.cpp - 3D球面网格创建
|
|
|
|
|
gctl::regular_mesh_sph_3d rm_3ds;
|
|
|
|
|
rm_3ds.init("mesh-1", "null", 30.25, 30.25, 2005, 0.5, 0.5, 10, 40, 40, 50);
|
|
|
|
|
rm_3ds.add_data(gctl::ElemData, gctl::Scalar, "data-1", 2.5);
|
|
|
|
|
rm_3ds.save_gmsh("mesh_sample10", gctl::OverWrite, gctl::NotPacked);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
更多示例可以在`example`目录下找到:
|
|
|
|
|
- `mesh_ex1.cpp`: 基础网格创建和数据操作
|
|
|
|
|
- `mesh_ex2.cpp`: 网格数据的导入导出
|
|
|
|
|
- `mesh_ex3.cpp`: 网格变换和操作
|
|
|
|
|
- `mesh_ex4.cpp`: 非结构化网格处理
|
|
|
|
|
- `mesh_ex5.cpp`: NetCDF格式文件操作
|
|
|
|
|
- `mesh_ex6.cpp`: 网格数据插值
|
|
|
|
|
- `mesh_ex7.cpp`: 网格数据统计分析
|
|
|
|
|
- `mesh_ex8.cpp`: 二维规则网格操作
|
|
|
|
|
- `mesh_ex9.cpp`: 三维规则网格操作
|
|
|
|
|
- `mesh_ex10.cpp`: 球面网格处理
|
2024-09-10 20:00:49 +08:00
|
|
|
|
|