update readme

This commit is contained in:
张壹 2025-02-03 11:09:59 +08:00
parent 3cd0cc307b
commit 432f555a52

156
README.md
View File

@ -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<int> elems; // 相邻单元列表
};
```
#### 网格单元 (Element)
```cpp
struct Element {
int id; // 单元ID
array<Node*> vertices; // 顶点列表
array<Element*> neighbors; // 相邻单元
};
```
#### 数据管理 (MeshData)
```cpp
class MeshData {
string name; // 数据名称
DataType type; // 数据类型
array<double> 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使用示例请参考各个网格类型的文档。基本使用模式如下