From 72fb9cac2fe561b580fd06bbf7787ce7bc1d9048 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Mon, 3 Feb 2025 12:06:47 +0800 Subject: [PATCH] update readme --- GCTL_logo.jpg | Bin 0 -> 33450 bytes README.md | 105 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 GCTL_logo.jpg diff --git a/GCTL_logo.jpg b/GCTL_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80cc01674ce063dd80360c915207d19eda1acaa0 GIT binary patch literal 33450 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 5859dbf..a7892ca 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,105 @@ -# gctl_potential +![logo](GCTL_logo.jpg) + +# GCTL Potential + +GCTL Potential 是地球物理计算工具与库(Geophysical Computational Tools & Library, GCTL)的重力和磁力场正演模拟模块。该模块提供了一系列用于计算重力场和磁场的核心功能。 + +## 功能特性 + +### 重力场计算 (G-Kernel) +- 2D模型计算 + - `gkernel_triangle2d`: 二维三角形体 + - `gkernel_rectangle2d`: 二维矩形体 + - `gkernel_polygon`: 二维多边形体 + +- 3D模型计算 + - `gkernel_triangle`: 三维三角形体 + - `gkernel_sphere`: 球体 + - `gkernel_block`: 长方体 + - `gkernel_tetrahedron`: 四面体 + - `gkernel_tricone`: 三锥体 + - `gkernel_tesseroid`: 曲面格网体(需要 GCTL_POTENTIAL_TESS 选项) + +### 磁场计算 (M-Kernel) +- `mkernel_dipole`: 偶极子 +- `mkernel_block`: 长方体 +- `mkernel_triangle`: 三角形体 +- `mkernel_tricone`: 三锥体 +- `mkernel_tetrahedron`: 四面体 + - 标准实现 + - Ren2017 实现方法 +- `mkernel_tesseroid`: 曲面格网体(需要 GCTL_POTENTIAL_MAGTESS 选项) + +### 网格与数据结构 +- `gm_data`: 基础数据结构 +- `gm_regular_grid`: 规则网格 +- `gm_regular_mesh_2d`: 二维规则网格 +- `gm_regular_mesh_3d`: 三维规则网格 +- `gm_regular_mesh_sph_3d`: 三维球面规则网格 +- `gm_tet_mesh`: 四面体网格 + +## 依赖 +- Eigen (矩阵运算库) +- autodiff (自动微分库,用于梯度计算) + +## 许可证 +GCTL Potential 采用双重许可证方案: +1. GNU Lesser General Public License v2 或更高版本 +2. 商业许可证(需单独购买) + +## 作者 +- Yi Zhang (yizhang-geo@zju.edu.cn) + +## 安装 +使用 CMake 构建系统: +```bash +mkdir build +cd build +cmake .. +make +make install +``` + +## 示例 +`example` 目录下提供了丰富的示例代码,展示了各种计算功能的使用方法: + +### 重力场计算示例 +- `gobser_tri2d_ex.cpp`: 二维三角形体重力场计算 + - 演示了如何读取 GMSH 格式的网格文件 + - 计算重力位、重力分量和重力梯度张量 + - 结果输出为 DSV 格式 +- `gobser_tri2d_sph_ex.cpp`: 球面坐标系下的二维三角形体重力场计算 + +### 磁场计算示例 +- `mobser_tetra_ex.cpp`: 四面体磁场计算 + - 展示了标准实现和 Ren2017 方法的对比 + - 包含磁位、磁场分量和 ΔT 异常计算 + - 支持 NetCDF 格式输出 +- `mobser_tetra_ex2.cpp`: 四面体磁场计算的另一个示例 +- `mobser_block_ex.cpp`: 长方体磁场计算 +- `mobser_tricone_ex.cpp`: 三锥体磁场计算 +- `mobser_tesseroid_ex.cpp`: 曲面格网体磁场计算 +- `mobser_dipole_ex.cpp`: 偶极子磁场计算 +- `mobser_tri_ex.cpp`: 三角形体磁场计算 +- `mobser_tri_sph_ex.cpp`: 球面坐标系下的三角形体磁场计算 + +### 特殊功能示例 +- `power_spectrum_ex.cpp`: 功率谱计算示例 +- `read_IGRF_ex.cpp`: IGRF 地磁场模型数据读取示例 +- `mobser_block_gradient_ex.cpp`: 长方体磁场梯度计算 + +### 数据格式支持 +- 网格文件格式: + - GMSH 格式 (.msh) + - Tetgen 格式 (.node, .ele) +- 输出格式: + - DSV (Delimiter-Separated Values) + - NetCDF + - 文本格式 + +所有示例代码都包含详细的注释,并提供了完整的数据输入输出流程。用户可以根据需要修改示例代码中的参数来适应自己的应用场景。 + +## 注意事项 +- 某些功能(如 tesseroid 计算)需要在编译时启用特定选项 +- 商业用途请联系作者获取商业许可证