gctl/lib/core/macro.h
2025-03-05 15:42:47 +08:00

73 lines
3.8 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) 2023 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 _GCTL_MACRO_H
#define _GCTL_MACRO_H
/**
* mathematic constants
*/
#define GCTL_BDL_MAX 1e+30 ///< 变量最大值
#define GCTL_BDL_MIN -1e+30 ///< 变量最小值
#define GCTL_INT_MAX 2147483647 ///< 整形最大值
#define GCTL_INT_MIN -2147483647 ///< 整形最小值
#define GCTL_PRECISION 16 ///< 定义小数点后需要使用的位数
#define GCTL_ZERO 1e-20 ///< 零值
#define GCTL_Pi 3.14159265358979323846264338327950288 ///< \pi
#define GCTL_Golden_Mean 0.6180339887498948482045 ///< 黄金比例
/**
* physical constants
*/
#define GCTL_WGS84_PoleRadius 6356752.3142 ///< WGS84椭球极半径
#define GCTL_WGS84_EquatorRadius 6378136.460 ///< WGS84椭球长半径
#define GCTL_WGS84_FLAT 3.35281066474748e-3 ///< (1.0/298.257223563)
#define GCTL_WGS84_NormPotential 6.263685171456948e+07 ///< m**2/s**2
#define GCTL_Earth_GM 3.986004418e+14 ///< m**3/s**2
#define GCTL_Earth_Radius 6371008.8 ///< 地球平均半径
#define GCTL_Earth_RefRadius 6371200.0 ///< 地球参考半径(常用于地磁场建模中)
#define GCTL_Moon_Radius 1738000 ///< 月球平均半径
// Ardalan A. A., Karimi R. & Grafarend E. W. (2010). A new reference equipotential surface, and reference ellipsoid for the planet mars.
// Earth Moon Planet, 106:1-13
#define GCTL_Mars_Ardalan2010_PoleRadius 3377678 ///< 火星的参考椭球极半径
#define GCTL_Mars_Ardalan2010_EquatorRadius 3395428 ///< 火星的参考椭球长半径
#define GCTL_Mars_Radius 3389500 ///< 火星平均半径
#define GCTL_G0 6.67408e-11 ///< 万有引力常数
#define GCTL_T0 5e+4 ///< 地磁场平均强度nT
#define GCTL_MU0 (4e-7*GCTL_Pi) ///< 乘真空磁导率 4*pi^-7
#define GCTL_EPS0 8.8541878176e-12 ///< 真空介电常数
/**
* macros
*/
#define GCTL_SIGN(a) (a>=0?1:-1) ///< 返回符号值
#define GCTL_FABS(a) (a>=0?a:-(a)) ///< 返回绝对值
#define GCTL_MAX(a,b) (a>b?a:b) ///< 返回a与b的最大值
#define GCTL_MIN(a,b) (a<b?a:b) ///< 返回a与b的最小值
#define GCTL_SetToBox(a,b,in) (GCTL_MAX(a, GCTL_MIN(b,in))) ///< 返回a与b之间的一个值若in在a与b之间则直接返回否则返回较近的边界值
#endif // _GCTL_MACRO_H