diff --git a/GCTL_logo.jpg b/GCTL_logo.jpg new file mode 100644 index 0000000..80cc016 Binary files /dev/null and b/GCTL_logo.jpg differ diff --git a/README.md b/README.md index efdc5c7..5773a3a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,159 @@ -# gctl_mesh +![](./doc/mesh_logo.png) + +# 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`: 球面网格处理