Go to file
2025-02-03 10:45:36 +08:00
backup redesigned meshdata and mesh 2025-01-12 23:39:36 +08:00
dep/wavelib initial upload 2024-09-10 20:02:00 +08:00
doc add doc 2025-01-13 09:15:55 +08:00
example tmp 2025-01-17 16:34:58 +08:00
lib update 2025-02-03 10:45:36 +08:00
tool tmp 2025-01-17 16:34:58 +08:00
.gitignore initial upload 2024-09-10 20:02:00 +08:00
CMakeLists.txt initial upload 2024-09-10 20:02:00 +08:00
config.h.in initial upload 2024-09-10 20:02:00 +08:00
GCTL_logo.jpg update 2025-01-13 00:10:04 +08:00
GCTL_MESHConfig.cmake.in initial upload 2024-09-10 20:02:00 +08:00
installer initial upload 2024-09-10 20:02:00 +08:00
README.md add doc 2025-01-13 09:15:55 +08:00

logo

GCTL Mesh Library

GCTL Mesh是地球物理计算工具库(Geophysical Computational Tools & Library)的网格处理模块,提供了多种类型的网格实现和操作功能。

功能特点

  • 支持多种网格类型的创建和操作
  • 提供2D和3D网格的实现
  • 包含规则网格和非规则网格的处理
  • 支持球面网格的处理
  • 支持网格数据的导入导出包括Gmsh格式和二进制格式
  • 支持标量、矢量和张量数据的处理

文档

基础类

  • mesh.h: 网格基类,定义了基本的网格接口和功能
  • meshdata.h: 网格数据结构的定义和处理

规则网格

线性网格

非规则网格

  • tri_mesh.h: 三角形网格用于复杂2D区域的离散化
  • tet_mesh.h: 四面体网格用于复杂3D区域的离散化

核心功能

网格数据管理

  • 支持在顶点或单元上定义数据
  • 支持三种数据类型:
    • 标量数据 (Scalar)
    • 矢量数据 (Vector)
    • 张量数据 (Tensor)
  • 数据操作功能:
    • 添加/删除数据
    • 数据导入导出
    • 数据统计分析

网格操作

  • 网格初始化和清理
  • 网格信息查询(节点数、单元数等)
  • 网格文件导入导出
    • 支持Gmsh格式
    • 支持二进制格式
    • 支持NetCDF格式部分网格类型
  • 网格数据可视化输出

网格类型

支持的网格维度:

  • 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)

应用场景

  • 规则网格:适用于简单几何形状的离散化,如矩形/立方体区域
  • 线性网格
    • 2D用于表示边界、裂缝等线性特征
    • 3D用于表示输电线路、管道系统、裂缝网络等
  • 三角形网格适用于复杂2D区域的有限元分析、流体动力学等
  • 四面体网格适用于复杂3D区域的有限元分析、计算流体力学等
  • 球面网格:特别适用于地球物理学、大气科学等全球尺度的模拟

API示例

详细的API使用示例请参考各个网格类型的文档。基本使用模式如下

// 创建网格对象
gctl::regular_grid rgd;
rgd.init("grid-1", "test grid", 4, 4, 0.0, 0.0, 1.0, 1.0);

// 添加数据
rgd.add_data(gctl::NodeData, gctl::Scalar, "temperature", 25.0);
rgd.add_data(gctl::ElemData, gctl::Vector, "velocity", velocity_array);

// 保存网格
rgd.save_gmsh("output.msh", gctl::OverWrite);

许可证

该项目采用双重许可证方案:

  1. GNU Lesser General Public License v2或更高版本
  2. 商业许可证(需单独申请)

联系方式

作者Yi Zhang (yizhang-geo@zju.edu.cn)

版权声明

Copyright (c) 2023 Yi Zhang

使用示例

库提供了多个完整的示例程序,展示了不同功能的使用方法:

基础网格操作

// 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);  // 添加单元数据

文件导入导出

// 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");  // 保存网格

球面网格处理

// 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: 球面网格处理