gctl_potential/lib/potential/gm_regular_grid.h
2025-04-25 18:09:51 +08:00

127 lines
5.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************
* ██████╗ ██████╗████████╗██╗
* ██╔════╝ ██╔════╝╚══██╔══╝██║
* ██║ ███╗██║ ██║ ██║
* ██║ ██║██║ ██║ ██║
* ╚██████╔╝╚██████╗ ██║ ███████╗
* ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝
* Geophysical Computational Tools & Library (GCTL)
*
* Copyright (c) 2022 Yi Zhang (yizhang-geo@zju.edu.cn)
*
* GCTL is distributed under a dual licensing scheme. You can redistribute
* it and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either version 2
* of the License, or (at your option) any later version. You should have
* received a copy of the GNU Lesser General Public License along with this
* program. If not, see <http://www.gnu.org/licenses/>.
*
* If the terms and conditions of the LGPL v.2. would prevent you from using
* the GCTL, please consider the option to obtain a commercial license for a
* fee. These licenses are offered by the GCTL's original author. As a rule,
* licenses are provided "as-is", unlimited in time for a one time fee. Please
* send corresponding requests to: yizhang-geo@zju.edu.cn. Please do not forget
* to include some description of your company and the realm of its activities.
* Also add information on how to contact you by electronic and paper mail.
******************************************************/
#ifndef _GM_REGULAR_GRID_H
#define _GM_REGULAR_GRID_H
#include "gctl/mesh/regular_grid.h"
#include "gm_data.h"
#include "gctl/math/extrapolate.h"
#include "gctl/math/space_filter.h"
namespace gctl
{
/**
* @brief 位场数据规则网格类型
*
* 此类型由规则网络类型继承而来。负责规则网格中的位场数据处理,可完成的处理类型包括求取不同阶次的
* 方向导数、线性特征提取、磁异常化极、区域场-剩余场分离、延拓等。
*/
class gm_regular_grid : public regular_grid
{
public:
gm_regular_grid(); ///< 构造函数
virtual ~gm_regular_grid(); ///< 析构函数
/**
* @brief 构造函数重载
*
* @param[in] in_name 网格的名称
* @param[in] in_info 与网格有关的信息
* @param[in] xnum x方向的节点数量
* @param[in] ynum y方向的节点数量
* @param[in] xmin x方向的最小值
* @param[in] ymin y方向的最小值
* @param[in] dx x方向的网格间隔
* @param[in] dy y方向的网格间隔
*/
gm_regular_grid(std::string in_name, std::string in_info, int xnum, int ynum,
double xmin, double ymin, double dx, double dy);
/**
* The following functions require the FFTW library. Turn off the macro GCTL_FFTW to disable these functions
*/
#ifdef GCTL_POTENTIAL_FFTW3
/**
* @brief 计算重磁异常的方向导数
*
* @param[in] datname 待计算的数据名称
* @param[in] gradname 计算结果的保存名称
* @param[in] c_type 需计算的方向导数类型。必须为TzxTzy或Tzz其中之一
* @param[in] order 求导的阶次
*/
void gradient(std::string datname, std::string gradname, gravitational_field_type_e c_type = Tzz, int order = 1);
/**
* @brief 计算化极磁异常
*
* @param[in] datname 待计算的数据名称
* @param[in] rtpname 计算结果的保存名称
* @param[in] inc 磁化倾角(度)
* @param[in] dec 磁化偏角(度)
*/
void rtp(std::string datname, std::string rtpname, double inc, double dec);
/**
* @brief 计算变磁化角度的化极磁异常
*
* @param[in] datname 待计算的数据名称
* @param[in] incname 磁化倾角数据名称
* @param[in] decname 磁化偏角数据名称
* @param[in] drtpname 计算结果的保存名称
* @param[in] order 变磁化角度计算中的泰勒展开阶数
*/
void drtp(std::string datname, std::string incname, std::string decname, std::string drtpname, int order = 1);
/**
* @brief 位场延拓
*
* @param[in] datname 待计算的数据名称
* @param[in] retname 计算结果的保存名称
* @param[in] height 延拓的距离(向上为负,向下为正)
*/
void conti(std::string datname, std::string retname, double height);
#endif //GCTL_POTENTIAL_FFTW3
/**
* @brief 趋势场分离
*
* @param datname 待计算的数据名称
* @param regname 计算的区域场数据名称
* @param resname 计算的局部场数据名称
* @param wx_size 东向窗口大小
* @param wy_size 北向窗口大小
* @param x_order 东向趋势场阶数
* @param y_order 北向趋势场阶数
*/
void trend(std::string datname, std::string regname, std::string resname, int wx_size, int wy_size, int x_order, int y_order);
};
};
#endif //_GM_REGULAR_GRID_H