diff --git a/README.md b/README.md index e7027c6..3aebb27 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,95 @@ GCTL Mesh是地球物理计算工具库(Geophysical Computational Tools & Librar - 支持网格数据的导入导出(包括Gmsh格式和二进制格式) - 支持标量、矢量和张量数据的处理 +## 代码库结构 + +### 核心库 (lib/) +``` +lib/ +├── mesh/ # 核心网格实现 +│ ├── mesh.h # 网格基类 +│ ├── meshdata.h # 网格数据结构 +│ ├── regular_grid.h # 规则网格实现 +│ ├── linear_mesh_2d.h # 2D线性网格 +│ ├── linear_mesh_3d.h # 3D线性网格 +│ ├── tri_mesh.h # 三角形网格 +│ ├── tet_mesh.h # 四面体网格 +│ └── regular_mesh_sph_3d.h # 球面网格 +├── io/ # 输入输出处理 +│ ├── gmsh_io.h # Gmsh格式支持 +│ ├── netcdf_io.h # NetCDF格式支持 +│ └── binary_io.h # 二进制格式支持 +└── utils/ # 工具函数 + ├── math_utils.h # 数学工具 + └── geo_utils.h # 几何工具 +``` + +### 依赖关系 +- `mesh.h` → 基类,定义网格接口 +- `meshdata.h` → 依赖 mesh.h,实现数据管理 +- 具体网格类 → 继承自 mesh.h,实现特定网格功能 + +## 实现细节 + +### 数据结构 + +#### 网格节点 (Node) +```cpp +struct Node { + int id; // 节点ID + double x, y, z; // 节点坐标 + array elems; // 相邻单元列表 +}; +``` + +#### 网格单元 (Element) +```cpp +struct Element { + int id; // 单元ID + array vertices; // 顶点列表 + array neighbors; // 相邻单元 +}; +``` + +#### 数据管理 (MeshData) +```cpp +class MeshData { + string name; // 数据名称 + DataType type; // 数据类型 + array values; // 数据值 + bool output_enabled; // 输出控制 +}; +``` + +### 核心功能实现 + +#### 网格生成 +- 规则网格:基于给定维度和间距生成 +- 非规则网格:支持从外部文件导入或程序化生成 +- 球面网格:基于经纬度和径向参数生成 + +#### 数据操作 +- 插值:支持线性插值和高阶插值 +- 梯度计算:支持一阶和二阶导数 +- 数据过滤:支持平滑和降噪操作 + +#### 文件格式支持 +- Gmsh格式:`.msh`文件,支持网格和数据的导入导出 +- NetCDF格式:`.nc`文件,支持结构化数据的存储 +- 二进制格式:`.bin`文件,用于高效的数据存储和读取 + +### 性能优化 + +#### 数据结构优化 +- 使用连续内存存储提高访问效率 +- 采用邻接表存储拓扑关系 +- 使用哈希表加速查找操作 + +#### 算法优化 +- 网格生成采用增量构建策略 +- 查找操作使用空间分区技术 +- 并行计算支持(可选) + ## 文档 ### 基础类 @@ -33,42 +122,31 @@ GCTL Mesh是地球物理计算工具库(Geophysical Computational Tools & Librar - [`tri_mesh.h`](doc/tri_mesh.md): 三角形网格,用于复杂2D区域的离散化 - [`tet_mesh.h`](doc/tet_mesh.md): 四面体网格,用于复杂3D区域的离散化 -## 核心功能 +## 编译和安装 -### 网格数据管理 -- 支持在顶点或单元上定义数据 -- 支持三种数据类型: - - 标量数据 (Scalar) - - 矢量数据 (Vector) - - 张量数据 (Tensor) -- 数据操作功能: - - 添加/删除数据 - - 数据导入导出 - - 数据统计分析 +### 系统要求 +- C++11或更高版本 +- CMake 3.10或更高版本 +- 可选依赖: + - NetCDF (用于NetCDF格式支持) + - MathGL (用于可视化支持) + - GMT (用于地理数据处理) -### 网格操作 -- 网格初始化和清理 -- 网格信息查询(节点数、单元数等) -- 网格文件导入导出 - - 支持Gmsh格式 - - 支持二进制格式 - - 支持NetCDF格式(部分网格类型) -- 网格数据可视化输出 +### 编译步骤 +```bash +mkdir build +cd build +cmake .. +make +make install +``` -### 网格类型 -支持的网格维度: -- 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) +### 配置选项 +- `GCTL_ENABLE_NETCDF`: 启用NetCDF支持 +- `GCTL_ENABLE_MATHGL`: 启用MathGL可视化 +- `GCTL_ENABLE_GMT`: 启用GMT支持 +- `GCTL_BUILD_EXAMPLES`: 构建示例程序 +- `GCTL_BUILD_TESTS`: 构建测试程序 ## 应用场景 @@ -80,6 +158,18 @@ GCTL Mesh是地球物理计算工具库(Geophysical Computational Tools & Librar - **四面体网格**:适用于复杂3D区域的有限元分析、计算流体力学等 - **球面网格**:特别适用于地球物理学、大气科学等全球尺度的模拟 +## 性能考虑 + +### 内存管理 +- 大规模网格处理时注意内存使用 +- 支持数据流式处理 +- 提供内存使用估算功能 + +### 计算效率 +- 网格操作采用高效算法 +- 支持并行计算(可选) +- 提供性能分析工具 + ## API示例 详细的API使用示例请参考各个网格类型的文档。基本使用模式如下: